ASP.NET WebAPI非常有能力在外部DLL中发现ApiController类,即使这些DLL未被引用也是如此。例如,我可能有MyWebApiProject有一组ApiControllers。然后我可以创建一个名为MyApiProjectPlugin的完全独立的项目,该项目也包含ApiController类。我已经能够使用第一个MyApiProject.dll将MyApiProjectPlugin.dll文件添加到bin文件夹,原始项目将发现插件项目中的所有控制器。我非常喜欢这种能力。
但是,我想要做的是能够将插件项目添加到bin文件夹内的子目录中。像bin / plugins这样的东西。当我尝试这个时,原来的MyApiProject无法发现插件的控制器。
有没有一种简单的方法让WebAPI在bin的子目录中查找ApiController类?如果我可以避免从头开始重写控制器工厂,我想。
答案 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());