如果我有以下类结构:
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支持?
答案 0 :(得分:1)
也许Unity的PerResolveLifetimeManager
可以帮到你。如果ILogger配置为PerResolveLifetimeManager
,则每个注入链仅创建一个实例。
使用此Life-Time管理器Unity会在Logger
解析时创建新的DataService
(解析后DataService
解析为AContainer
AContainer
1}}),并在Logger
中注入相同的创建AContainer
。
解决DataService
后,系统会创建新的Logger
和新的BContainer
。这个新的logger
将在新的DataService
和BContainer
中注入; DataService
将注入BContainer
。
结果将是:
2个不同Containers
:AContainer
和BContainer
。
2个不同的DataServices
:每个容器中有一个。
2(而不是4)Loggers
:AContainer
与DataService
和BContainer
共享记录器与其logger
共享其他DataService
。