Asp.net Core - Registrando Controllers de um Assembly externo

Asp.net Core - Registrando Controllers de um Assembly externo

Olá pessoALL,

Uma dica simples, mas que pode ser útil. Estou desenvolvendo o material para o meu workshop de testes e me deparei com uma situação:
Criei alguns controllers com rotas que só devem existir durante a execução dos testes e queria que os mesmos ficassem em um projeto separado.

Controller em um projeto separado

O código do controller é bem simples:

    [AllowAnonymous]
    [Route("api/test/ping")]
    public class TestPingController : ControllerBase
    {
        [HttpGet]
        public ActionResult Pong()
        {
            return Ok("pong");
        }
    }

Para registrar o controller no Startup.cs:

        public Startup(IConfiguration configuration, IWebHostEnvironment environment)
        {
            Configuration = configuration;
            HostEnvironment = environment;
        }

        public IConfiguration Configuration { get; }
        public IWebHostEnvironment HostEnvironment { get; }

        private bool IsTest => Configuration.GetValue("IsTest", false);
        
        public void ConfigureServices(IServiceCollection services)
        {
            var mvcBuilder = services.AddMvc(o =>
            {
                var policy = new AuthorizationPolicyBuilder()
                    .RequireAuthenticatedUser()
                    .Build();
                o.Filters.Add(new AuthorizeFilter(policy));
            }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
            if (IsTest)
            {
                var assembly = typeof(TestPingController).Assembly;
                mvcBuilder.PartManager.ApplicationParts.Add(new AssemblyPart(assembly));
            }
        }

Pronto! Com isso podemos usar controllers de outros projetos e registra-los baseado em configuração.
Espero que essa dica seja útil para vocês.

[]s e até a próxima.