如何向WebAPI的控制器发现添加新的DLL位置?

时间:2014-03-04 15:41:54

标签: asp.net-web-api

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

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

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

1 个答案:

答案 0 :(得分:2)

您可以编写程序集解析程序。

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());