Unity разрешает конкретные классы в универсальные интерфейсы, когда они доступны - PullRequest
1 голос
/ 17 октября 2011

Я могу разрешить универсальные интерфейсы к универсальным классам, таким как общий шаблон репозитория.

IRepository<objectA> resolves to Repository<objectA>
IRepository<objectB> resolves to Repository<objectB>

Но тогда для objectC мне нужен конкретный репозиторий, а именно ObjectCRepository, который расширяет Repository<objectC>.Если я зарегистрируюсь, не будет ли двух разных регистраций для IRepository<objectC> и все не получится?

1 Ответ

1 голос
/ 20 октября 2011

Будет две регистрации, но они не конфликтуют. Unity достаточно умен, чтобы предпочесть полностью определенные закрытые генерики над открытыми. Например, это отлично работает:

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <alias alias="ILog_Interface" type="Common.ILog`1, Common2"/>
    <alias alias="Logger_Class" type="Common.Logger`1, Common2"/>
    <alias alias="DemoServiceLog_Interface" type="Common.ILog`1[[Services.Demo.DemoService, Services.Demo]], Common2"/>
    <alias alias="DemoServiceLog_Class" type="Common.ServiceLogger`1[[Services.Demo.DemoService, Services.Demo]], Common2"/>

        <container name="DemoService">
          <register type="ILog_Interface" mapTo="Logger_Class"/>
          <register type="DemoServiceLog_Interface" mapTo="DemoServiceLog_Class"/>
        </container>
</unity>
...