André Carlucci

Skeptic .net development

Adicionando WebApi Controllers em um assembly separado

A maneira que o WebApi utiliza para buscar todos os possíveis controllers é através de uma classe chamada DefaultAssembliesResolver, que basicamente vasculha todos os assemblies do AppDomain conforme o código abaixo:

Este método é chamado quando o primeiro request para uma rota WebApi é recebido e é executado somente uma vez. O problema é que se o assembly que você colocou seus ApiControllers não estiver sido carregado neste momento, o WebApi não vai enxergá-los.

Para resolver isso, apenas carregue o assembly via Assembly.Load ou simplesmente chame um método de alguma classe do assembly desejado antes de configurar o WebApi: problem solved ;)

Caso deseje fazer algo mais avançado nessa procura, você pode implementar uma interface chamada IAssembliesResolver e configurar sua utilização assim: