0

我正在使用框架 4.5 开发 .NET WEB Api REST 服务,现在的架构方向是分离我们 API 的功能区域。换句话说,将控制器放入单独的程序集中,例如将控制器放在诸如 company.web.administration、company.web.claims 等程序集中。

在尝试了它之后,我注意到了 MVC 框架的强大功能。我可以将控制器放入单独的类库中,但只要这些库位于 bin 文件夹中,它们甚至不必被引用。MVC 在程序集中找到它们,并且 API 调用工作正常。

但是在这种架构下,问题就出现了,我们可能会得到大量的这些控制器库。因此,例如,将它们打包在 bin\controllers 下会很有帮助。将控制器放入子文件夹会停止 ASP.NET MVC WEB API 框架找到它们的能力。

我正在寻找一种方法来告诉框架在我的目录下以及 bin 中查找这些控制器。我使用的选项之一是我修改了 Web.config 文件,如下所示:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="bin;bin\controllers;controllers"/>
    </assemblyBinding>
</runtime>

那没有用。有任何想法吗?

4

1 回答 1

1

不久前,我写了一篇关于如何做到这一点的博客文章 - http://www.strathweb.com/2012/06/using-controllers-from-an-external-assembly-in-asp-net-web-接口/

基本上,您需要推出自己的或IAssembliesResolver覆盖GetAssemblies().DefaultAssembliesResolver

public class CustomAssemblyResolver : IAssembliesResolver
{
  public ICollection<Assembly> GetAssemblies()
  {
    List<Assembly> baseAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
    var controllersAssembly = Assembly.LoadFrom(@"C:\PATH_TO_MY_CONTROLLERS_ASSEMBLY");
    baseAssemblies.Add(controllersAssembly);
    return baseAssemblies;
   }
}
于 2012-11-08T01:36:01.763 回答