我正在集思广益,讨论如何将web api控制器隔离到他们自己的“模块”中,这些模块可以混合到一个webapi应用程序中.但是我想隔离它们并且它们的依赖关系彼此形成,因为可能存在程序集版本冲突.我一直想知道是否可以通过每个控制器的不同应用程序域实现这一点.有人有这方面的经验吗?
解决方法
bin文件夹中的任何内容都将加载到当前的应用程序域中,因此通常这不是问题.但是,在避免版本控制冲突时,您可以使用自定义程序集解析程序将多个程序集/版本加载到同一AppDomain中.这将允许您将其他程序集引入Web api的AppDomain.
public class CustomAssemblyResolver : DefaultAssembliesResolver { public override ICollection GetAssemblies() { // load all of your assemblies and return } }
然后,您将在配置中替换web api的默认程序集解析程序.
config.Services.Replace(typeof(IAssembliesResolver),new CustomAssemblyResolver());
当web api转到搜索程序集以查找控制器时,它现在将引入所有其他程序集.有关更详细的说明,请参见this example.