我有一个包(它的名字是Tree), 树包含10个内部服务(接口),它们由Autofac解析。 树包含2个外部服务:
TreeCommand
TreeQuery
我想在我的应用程序中使用多个树。
StudentTree
TeacherTree
CompanyTree等。
每个实现可以使用不同的组件注册(对于子服务)
如何通过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对此类要求的最佳做法是什么?