C# 将Web API控制器添加到不同的程序集

C# 将Web API控制器添加到不同的程序集,c#,.net,asp.net-mvc-4,asp.net-web-api,C#,.net,Asp.net Mvc 4,Asp.net Web Api,如何将Web Api控制器添加到其他程序集? 我想将web API控制器与MVC应用程序分离。 在解决方案中创建新的类库项目并添加新的 从ApiController继承的类 您可能需要向新项目添加一些额外的引用,因为默认情况下不包括所有mvc库 在mvc项目中,添加对包含api控制器的新类库项目的引用 构建和测试 WebApi是开箱即用的 DefaultAssembliesResolver类用于加载程序集以查找APIController。以下是源代码: public class Defaul

如何将Web Api控制器添加到其他程序集? 我想将web API控制器与MVC应用程序分离。

  • 在解决方案中创建新的类库项目并添加新的 从ApiController继承的类
  • 您可能需要向新项目添加一些额外的引用,因为默认情况下不包括所有mvc库
  • 在mvc项目中,添加对包含api控制器的新类库项目的引用
  • 构建和测试

WebApi是开箱即用的

DefaultAssembliesResolver类用于加载程序集以查找APIController。以下是源代码:

  public class DefaultAssembliesResolver : IAssembliesResolver {    
    public virtual ICollection<Assembly> GetAssemblies() {
      return AppDomain.CurrentDomain.GetAssemblies().ToList();
    }
  }
如果您使用的是旧版本的WebApi,请尝试实现IAssembliesResolver并更改其默认实现,如下所示:

GlobalConfiguration.Configuration.Services.Replace(typeof(IAssembliesResolver), 
                                                   new YourCustomAssemblyResolver());

我也有同样的问题。您所说的“调用目标程序集中某个类的任何方法或从中加载类型”是什么意思。我想这就是我的原因。作为一种解决方法,我必须创建一个从api控制器继承的虚拟类。名称空间是目标库,但伪类与我的api控制器一起驻留在单独的库中。Hacky,但实际上是有效的。@TruMan1要检查这一点,你可以做的一件事是按照我上面所示的方式实现并注册你的iAssembliseSResolver,并在GetAssemblisions方法上设置一个断点。运行该应用程序,当调试器停止时,检查GetAssemblys方法是否也返回带有控制器的程序集。从web项目中清除bin文件夹,然后重新生成解决方案
GlobalConfiguration.Configuration.Services.Replace(typeof(IAssembliesResolver), 
                                                   new YourCustomAssemblyResolver());