tix*_*ix3 6 c# visual-studio asp.net-web-api asp.net-web-api2
我有一个webapi2 C#项目,我在控制器文件夹中有所有控制器.我现在有一些我想要添加的功能,但我想将它放在一个不同的visual studio项目中,该项目将拥有自己的控制器(以及模型和视图)文件夹.这是否可能,以便我可以创建某种将由webapi2加载的模块?
Web Api 依赖IHttpControllerSelector来选择处理请求的 api 控制器,其默认实现依赖IAssembliesResolver来解析程序集以搜索 api 控制器。
在最少的更改中,您可以用自定义实现替换此程序集解析器,该实现将为您加载其他库。
一个非常幼稚的例子可能如下所示:
public class CustomAssemblyResolver : IAssembliesResolver
{
public List<string> PluginNames { get; set; }
public CustomAssemblyResolver()
{
PluginNames = new List<string>();
//Add the custom libraries here
PluginNames.Add("Your_Second_Library");
}
public ICollection<Assembly> GetAssemblies()
{
var asms = AppDomain.CurrentDomain.GetAssemblies().ToList();
foreach (var name in PluginNames)
{
var asmPath = System.IO.Path.Combine(HostingEnvironment.MapPath("~/"), name + ".dll");
try
{
var asm= System.Reflection.Assembly.LoadFrom(asmPath);
if(!asms.Contains(asm))
asms.Add(asm);
}
catch (Exception)
{
}
}
return asms;
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以使用此代码替换默认解析器
config.Services.Replace(typeof(IAssembliesResolver), new CustomAssemblyResolver());
Run Code Online (Sandbox Code Playgroud)
在你的类Register方法中WebApiConfig。
然后,将所有带有控制器类的附加库复制到 bin 目录中,就完成了。
如果您需要进一步自定义控制器选择,您可以以IHttpControllerSelector类似的方式自定义实现并替换现有的实现。
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |