“我们有一个场景,我们可以在配置文件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
但是如果没有统一容器分辨率,我的意思是每件事都可以反思