我有一个包(它的名字是 Tree),Tree 包含 10 个内部服务(接口),它们由 Autofac 解析。树包含 2 个外部服务:
树命令
树查询
我想在我的应用程序中使用多个树。
学生树
教师树
公司树等
每个实现可以使用不同的组件注册(用于子服务)
Autofac如何实现这种要求?
如果没有多个容器,我的解决方案看起来有点奇怪:
样品注册:(是原版的简化版)
foreach (var domainInfo in domainInfoList)
{
var domainInfoParameter = new NamedParameter("domainInfo", domainInfo);
var domain = domainInfo.Domain;
builder.RegisterType<TreeFactory>()
.Named<TreeFactory>(domain)
.WithParameter(domainInfoParameter)
.SingleInstance();
builder.RegisterType<SqlTreeRepository>()
.Named<ITreeRepository>(domain)
.WithParameter(domainInfoParameter);
builder.RegisterType<TreeCommandService>()
.Named<TreeCommandService>(domain)
.WithParameter(domainInfoParameter);
builder.RegisterType<TreeQueryService>()
.Named<TreeQueryService>(domain)
.WithParameter(domainInfoParameter);
}
样品解析:
container.ResolveNamed<TreeFactory>("Teacher");
container.ResolveNamed<TreeCommand>("Student");
container.ResolveNamed<TreeQuery>("Company");
对于这种要求,Autofac 的最佳实践是什么?