Контейнер Unity IOC и как разрешить разные экземпляры одного и того же интерфейса - PullRequest
1 голос
/ 26 февраля 2010

У меня есть единичный контейнер, в котором я регистрирую типы, например:

    IUnityContainer container = new UnityContainer()
.RegisterType<ITaxAuthorityRateService, TaxAuthorityPopulationRateService>( "PopulationRate" )
.RegisterType<ITaxAuthorityRateService, TaxAuthorityBusinessLicenseRateService>( "BusinessLicenseRate" );

Тогда я также хочу зарегистрировать 2 разных сервиса, которые принимают переменную ITaxAuthorityRateService в своем конструкторе. Для обеих служб нужен другой класс, производный от ITaxAuthorityRateService. Как я могу справиться с этой ситуацией?

1 Ответ

9 голосов
/ 26 февраля 2010

Хорошо, я понял это. Правильно сохранять одинаковые имена при регистрации («PopulationRate» и «BusinessLicenseRate»). Все, что мне нужно было сделать, это добавить атрибут к параметру ITaxAuthorityRateService в конструкторе каждой службы, например:

Параметр конструктора Service1:

[Dependency( "BusinessLicenseRate" )]
ITaxAuthorityRateService rateService

Параметр конструктора Service2:

[Dependency( "PopulationRate" )]
ITaxAuthorityRateService rateService

И затем каждая служба получила правильный экземпляр ITaxAuthorityRateService.

...