Adicionar Controlador de API da Web a uma assembly diferente

Como posso adicionar o Controlador Web Api a um assembly diferente? Eu quero separar os controladores de API da web do meu aplicativo MVC.

O WebApi faz isso na checkbox.

A class DefaultAssembliesResolver é aquela usada para carregar os assemblies para procurar por ApiControllers. Aqui está o código fonte:

public class DefaultAssembliesResolver : IAssembliesResolver { public virtual ICollection GetAssemblies() { return AppDomain.CurrentDomain.GetAssemblies().ToList(); } } 

O truque é carregar sua assembly no AppDomain antes da primeira chamada para um serviço web.api.

Chame qualquer método de uma class no assembly de destino ou simplesmente carregue um tipo dele. Ex:

 var x = typeof (YourApiControllerInAnotherAssembly); 

Se você estiver usando uma versão mais antiga do WebApi, tente implementar o IAssembliesResolver e alterar a implementação padrão da seguinte forma:

 GlobalConfiguration.Configuration.Services.Replace(typeof(IAssembliesResolver), new YourCustomAssemblyResolver()); 
  • crie um novo projeto de biblioteca de classs em sua solução e adicione novas classs que herdam do ApiController.
  • você pode ter que adicionar algumas referências extras ao seu novo projeto, já que todas as bibliotecas mvc não são incluídas por padrão.
  • no seu projeto mvc, adicione uma referência ao novo projeto de biblioteca de classs que contém seus controladores api
  • construir e testar