Unity在可用时将具体类解析为通用接口

时间:2011-10-17 15:54:22

标签: generics unity-container

我可以解析通用类的通用接口,例如常见的通用存储库模式。

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

但是对于objectC我需要一个具体的存储库,即扩展ObjectCRepository的{​​{1}}。如果我注册了这个,那么Repository<objectC>就不会有两个不同的注册,一切都会失败吗?

1 个答案:

答案 0 :(得分:1)

将有两个注册,但它们不会发生冲突。 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>