我可以解析通用类的通用接口,例如常见的通用存储库模式。
IRepository<objectA> resolves to Repository<objectA>
IRepository<objectB> resolves to Repository<objectB>
但是对于objectC
我需要一个具体的存储库,即扩展ObjectCRepository
的{{1}}。如果我注册了这个,那么Repository<objectC>
就不会有两个不同的注册,一切都会失败吗?
答案 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>