【发布时间】:2014-11-17 23:02:22
【问题描述】:
我正在集思广益,关于如何将 Web api 控制器隔离到它们自己的“模块”中,这些“模块”可以混合在一起成为一个单一的 webapi 应用程序。但是,我想将它们和它们的依赖关系相互隔离,因为可能会存在程序集版本冲突。我一直想知道这是否可以通过每个控制器的不同应用程序域来实现。有人有这方面的经验吗?
【问题讨论】:
标签: design-patterns asp.net-web-api appdomain isolation
我正在集思广益,关于如何将 Web api 控制器隔离到它们自己的“模块”中,这些“模块”可以混合在一起成为一个单一的 webapi 应用程序。但是,我想将它们和它们的依赖关系相互隔离,因为可能会存在程序集版本冲突。我一直想知道这是否可以通过每个控制器的不同应用程序域来实现。有人有这方面的经验吗?
【问题讨论】:
标签: design-patterns asp.net-web-api appdomain isolation
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。
【讨论】: