Autofac的多个容器替代品

时间:2018-02-16 19:41:30

标签: autofac autofac-module

我有一个包(它的名字是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对此类要求的最佳做法是什么?

0 个答案:

没有答案