【发布时间】:2011-10-12 15:19:36
【问题描述】:
我有一些松散耦合的代码,它们依赖于加载到当前应用程序域中的特定程序集:
Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().Where(
candidateAssembly => candidateAssembly.FullName.StartsWith("Microsoft.WindowsAzure.ServiceRuntime")).SingleOrDefault();
并且该代码在 MVC 2 应用程序中执行并产生 null 引用,因为该程序集未加载到当前应用程序域中。我可以只从该程序集中调用一些代码,但这会引入应用程序代码对该程序集的强依赖性,并且我不再有松散耦合。
在我的代码运行之前,我需要强制 IIS(或其他任何东西)将该程序集加载到应用程序域中。我尝试编写IHttpModule 的实现并将其列在web.config 中,但没有帮助。
到目前为止,我尝试在<system.web><compilation><assemblies> 下添加程序集,看起来它可以工作,但我不确定它是否可靠。
如何在我的代码中不引入依赖项的情况下强制将该特定程序集加载到应用程序域中?
【问题讨论】:
-
Assembly.load 应该加载程序集,前提是您知道它的名称。 MEF 还具有查找和加载程序集 AFAIK 的方法
-
@Simon Halsey:这又是一个硬依赖,我想要一些不需要更改代码的东西。
-
在这种情况下,我也会依赖依赖注入工具。例如,StructureMap 支持扫描特定目录中的程序集,非常适合那些“拖放”插件需求。
标签: .net asp.net asp.net-mvc iis reflection