Unity IoC - 指定程序集搜索路径

时间:2017-03-10 15:15:44

标签: c# .net .net-assembly ioc-container

我有多个项目通过统一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容器从那里动态加载程序集。这是出于可维护性的目的:这样当我必须更新程序集时,我将它们全部放在一个地方。

到目前为止我尝试过:

  1. 用Google搜索直到我头疼
  2. 拦截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;
    }
    
  3. 使用PrivateBinPath属性挣扎但在那里你只能指定子文件夹 - 不是我的情况

  4. 有什么建议吗?这甚至可能吗?

0 个答案:

没有答案