【问题标题】:How to add new DLL locations to WebAPI's controller discovery?如何将新的 DLL 位置添加到 WebAPI 的控制器发现?
【发布时间】:2014-03-04 15:41:54
【问题描述】:

ASP.NET WebAPI 具有在外部 DLL 中发现 ApiController 类的能力,即使这些 DLL 没有被引用也是如此。例如,我可能有具有一组 ApiControllers 的 MyWebApiProject。然后我可以创建一个完全独立的名为 MyApiProjectPlugin 的项目,其中也包含 ApiController 类。我已经能够将 MyApiProjectPlugin.dll 文件添加到带有第一个 MyApiProject.dll 的 bin 文件夹中,并且原始项目将发现插件项目中的所有控制器。我真的很喜欢这种能力。

但是,我想做的是能够将插件项目添加到 bin 文件夹内的子目录中。像 bin/plugins 之类的东西。当我尝试这个时,原来的 MyApiProject 无法发现插件的控制器。

有没有一种简单的方法让 WebAPI 在 bin 的子目录中查找 ApiController 类?如果我可以避免从头开始重写控制器工厂,我愿意。

【问题讨论】:

    标签: asp.net-web-api


    【解决方案1】:

    你可以编写一个程序集解析器。

    public class PluginsResolver : DefaultAssembliesResolver
    {
        public override ICollection<Assembly> GetAssemblies()
        {
            List<Assembly> assemblies = new List<Assembly>(base.GetAssemblies());
        
            assemblies.Add(Assembly.LoadFrom(@"<Path>\MyApiProjectPlugin.dll"));
        
            return assemblies;
        }
    }
    

    在WebApiConfig的Register方法中,注册解析器。

    config.Services.Replace(typeof(IAssembliesResolver), new PluginsResolver());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多