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 和 IWhatever 与 Container 一起注册。

另一条路线将我引向属性注入,这通常是不鼓励的,但在这里可能有一席之地。

那么在 IoC 中是否存在此类问题的常见模式,Unity 是否支持?

4

1 回答 1

1

也许 UnityPerResolveLifetimeManager可以帮助你。如果 ILogger 配置PerResolveLifetimeManager为每个注入链仅创建一个实例。

有了这个 Life-Time Manager UnityLogger在 aDataService被解析时创建一个新的(并且在你解析时DataService被解析为注入),并注入在.AContainerAContainerLoggerAContainer

当您解决时,将创建一个新的DataService和一个新的。这个新的将被注入到这个新的和中;将被注入.LoggerBContainerloggerDataServiceBContainerDataServiceBContainer

结果将是:

2 个不同的Containers:AContainerBContainer. 2 个不同DataServices:每个容器中一个。2(不是 4)LoggersAContainer与它共享记录器并与DataService它共享BContainer其他。loggerDataService

于 2013-03-04T14:07:15.333 回答