我有多个项目通过统一IoC加载程序集。有一个xml文件包含容器的配置,如
<component
id="MyComponent"
service="MyNamespace.MyInterfaces.IMyComponent, MyNamespace.MyInterfaces"
type="MyNamespace.MyClasses.MyComponent, MyNamespace.MyClasses"
lifestyle="singleton">
<parameters>
<systemId>ID</systemId>
<!-- ctor -->
</parameters>
</component>
所有这些项目都有自己的xml配置文件,但共享相同的程序集。我想要做的是将所有通用程序集放在一个文件夹(在Intranet中)中,让unity容器从那里动态加载程序集。这是出于可维护性的目的:这样当我必须更新程序集时,我将它们全部放在一个地方。
到目前为止我尝试过:
拦截AssemblyResoveEvent
以手动加载程序集(如this answer中所述) - 没有运气
protected override void OnStartup(StartupEventArgs e)
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(LoadFromSameFolder);
...
}
static Assembly LoadFromSameFolder (object sender, ResolveEventArgs args)
{
string folderPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string assemblyPath = Path.Combine(folderPath, "DLL\\", new AssemblyName(args.Name).Name + ".dll");
System.Diagnostics.Debug.WriteLine("ASS: " + assemblyPath);
if (!File.Exists(assemblyPath)) return null;
Assembly assembly = Assembly.LoadFrom(assemblyPath);
return assembly;
}
使用PrivateBinPath
属性挣扎但在那里你只能指定子文件夹 - 不是我的情况
有什么建议吗?这甚至可能吗?