0

我有一个包(它的名字是 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 的最佳实践是什么?

4

0 回答 0