Единство, решающее по имени - PullRequest
3 голосов
/ 24 декабря 2010

У меня есть следующий конструктор класса Service:

public class Service : IService
{
    private readonly IRepository _repository;

    public Service(IRepository repository)
    {
        _repository = repository;
    }

    // ...
}

IRepository имеет две именованные реализации.Я хочу разрешить IService, но нужно указать, какую реализацию IRepository следует использовать (служба должна быть гибкой, и я не могу поместить атрибут Dependency в параметр конструктора IRepository).

Есть ли способ реализовать ее с помощью Unity?

1 Ответ

3 голосов
/ 24 декабря 2010

Вы можете использовать раздел конфигурации Unity для достижения этой цели.Проверьте эту ссылку.

В разделе конфигурации вы можете указать отображение следующим образом.

 <type type="IMyService" mapTo="MyDataService" name="DataService">
      <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,
                                 Microsoft.Practices.Unity.Configuration">
        <constructor>
          <param name="connectionString" parameterType="string">
            <value value="AdventureWorks"/>
          </param>
          <param name="logger" parameterType="ILogger">
            <dependency />
          </param>
        </constructor> 
        <property name="Logger" propertyType="ILogger" />
        <method name="Initialize">
          <param name="connectionString" parameterType="string">
            <value value="contoso"/>
          </param>
          <param name="dataService" parameterType="IMyService">
            <dependency />
          </param>
        </method>
      </typeConfig>
    </type>
...