"У нас есть сценарий, в котором мы можем зарегистрироваться в конфигурационном файле 2 Singleton того же типа, но с другой версией dll. В фоновом режиме у нас есть 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);
}
Ожидаемый результат:
Version = 1.0.0.0
Version = 5.5.5.5
Фактический результат:
Version = 1.0.0.0
Version = 1.0.0.0
Но без Unity Разрешение контейнера Я имею в виду, с отражением каждая работа отлично