2013-02-19 94 views
0

如果我有下面的类结构:统一:从母公司注入到服务子

public AContainer : IContainer 
{ 
    public AContainer(ILogger log, IDataService dataService) 

    ....   
} 

public BContainer : IContainer 
{ 
    public BContainer(ILogger log, IDataService dataService) 

    ....   
} 

public DataService : IDataService 
{ 
    public DataService(ILogger log, ISomethingElse somethingElse, IWhatever whatever) 

    .... 
} 

而且我想注册相同的DataService的两个不同的实例 - 一个注入的aContainer和一个注入BContainer - 将AContainer的日志注入到DataService中,并将BContainer的日志注入到DataService中。

一条路线似乎引导我注册完整的结构,使用ResolvedParameter,这感觉不舒服,因为我需要注册ISomethingElse和IW以及容器。

另一条路线将我引向财产注入,这通常是不鼓励的,但可能在这里有一个地方。

那么在IoC中是否存在这种问题的一种常见模式,并且它是否受Unity支持?

回答

1

也许Unity的PerResolveLifetimeManager可以帮到你。如果配置了ILogger,只有PerResolveLifetimeManager,则每个注入链只创建一个实例。

今生,时间管理统一创建一个新的LoggerDataService解决(和DataService解决在AContainer被注入,当你解决AContainer),并注入在AContainer创建Logger相同。

当您解析BContainer时,将会创建新的DataService和新的Logger。这个新的logger将注入这个新的DataServiceBContainer; DataService将被注入BContainer

其结果将是:

2 diferent ContainersAContainerBContainer。 2个不同的DataServices:每个容器一个。 2(不是4)LoggersAContainer与其DataServiceBContainer共享其他logger与其DataService共享记录器。

+0

终于有机会尝试一下,除了我们的记录器在生成容器后解决属性注入问题之外,它会起作用。 Unity儿童容器最终给了我一个解决方案,不过谢谢你的回答。它帮助我走上了正确的道路。 – pdr 2013-07-29 15:07:36

+0

我很乐意提供帮助。 – jlvaquero 2013-07-30 06:21:29