Unity:从父母到孩子注入服务

时间:2013-02-19 17:54:14

标签: .net unity-container ioc-container

如果我有以下类结构:

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和IWhatever以及Container。

另一条路线引导我注意财产注入,这通常是气馁,但可能在这里占有一席之地。

在IoC中是否存在这种问题的常见模式,是否受Unity支持?

1 个答案:

答案 0 :(得分:1)

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

使用此Life-Time管理器Unity会在Logger解析时创建新的DataService(解析后DataService解析为AContainer AContainer 1}}),并在Logger中注入相同的创建AContainer

解决DataService后,系统会创建新的Logger和新的BContainer。这个新的logger将在新的DataServiceBContainer中注入; DataService将注入BContainer

结果将是:

2个不同ContainersAContainerBContainer。 2个不同的DataServices:每个容器中有一个。 2(而不是4)LoggersAContainerDataServiceBContainer共享记录器与其logger共享其他DataService