使用.Net4.6.2从相同的dll(名称)解析不同版本的2个对象?

时间:2019-06-16 10:01:18

标签: c# unity-container assembly-loading

“我们有一个场景,我们可以在配置文件2中选择相同类型但dll版本不同的Singleton。在后台,我们有2dll类(仅不同版本),它们都实现了所需的接口。我们想使用Unity会为此接口解析2个实例。“

要重现,请使用以下配置文件

<configuration>
<unity>
    <aliases>
      <add alias="DtmParameter1" type="FullFrameworkLibLogic.DtmParameter,  FullFrameworkLibLogic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <add alias="DtmParameter2" type="FullFrameworkLibLogic.DtmParameter, FullFrameworkLibLogic, Version=5.5.5.5, Culture=neutral, PublicKeyToken=null" />
</aliases>
    <container>

      <register name="1" type="IDtmParameter" mapTo="DtmParameter1">
<lifetime type="singleton" />
      </register>

      <register name="2" type="IDtmParameter" mapTo="DtmParameter2">
        <lifetime type="singleton" />
      </register>
    </container>
  </unity>
</configuration>

我测试如下:

public void Demo()
{
        IDtmParameter dtmParameter1 = this.container.Resolve<IDtmParameter>("1");
            var msg1 = dtmParameter1.GetVersion();
            Console.WriteLine(msg1);

            IDtmParameter dtmParameter2 = this.container.Resolve<IDtmParameter>("2");
            var msg2 = dtmParameter2.GetVersion();
            Console.WriteLine(msg2);
}

预期结果: 版本= 1.0.0.0 版本= 5.5.5.5

实际结果: 版本= 1.0.0.0 版本= 1.0.0.0

但是如果没有统一容器分辨率,我的意思是每件事都可以反思

0 个答案:

没有答案