0

我正在构建 Autofac Container 如下

_container = ConfigureContainer(new ContainerBuilder()).Build();

我有 ConfigureContainer 方法来构建/配置 Autofac ContainerBuilder,如下所示

        private static ContainerBuilder ConfigureContainer(ContainerBuilder cb)
        {
            cb.RegisterModule(new QuartzAutofacFactoryModule());
            cb.RegisterModule(new QuartzAutofacJobsModule(Assembly.GetExecutingAssembly()));

            cb.Register(l => Logging.Logger.Instance()).As<ILogger>();

            var reader = new ConfigurationSettingsReader();
            cb.RegisterModule(reader);

            // How do I convert following lines to Autofac Config?

            cb.RegisterCollection<StandardTask>("IList<StandardTask>").As<IList<StandardTask>>();

            cb.RegisterType<HealthMonitoringMessageDispatcherTask>().Named<StandardTask>("HealthMonitoringTask1").MemberOf("IList<StandardTask>");
            cb.RegisterType<HealthMonitoringMessageDispatcherTask>().Named<StandardTask>("HealthMonitoringTask2").MemberOf("IList<StandardTask>");

            cb.RegisterType<PurgeMessageDispatcherTask>().Named<StandardTask>("PurgeTask1");
            cb.RegisterType<PurgeMessageDispatcherTask>().Named<StandardTask>("PurgeTask2");

            return cb;
        }

我有 Autofac 配置部分如下

<autofac>
    <components>
      <!--<component type="NAB.Custom.Logging.Logger, NAB.Custom.Logging" service="NAB.Logging.Core.ILogger, NAB.Logging" />-->
      <component type="NAB.Windows.ServicesConsole.Services.SchedulerService, NAB.Windows.ServicesConsole" service="NAB.Windows.ServicesConsole.Services.Core.ITopshelfService, NAB.Windows.ServicesConsole" />
      <component type="NAB.Windows.ServicesConsole.Jobs.HealthMonitoringMessageDispatcherJob, NAB.Windows.ServicesConsole" />
      <component type="NAB.Windows.ServicesConsole.Jobs.PurgeMessageDispatcherJob, NAB.Windows.ServicesConsole" />
    </components>
  </autofac>

它从自定义配置部分正确解析了配置的组件,但是,我也想将以下注册从代码移动到自定义配置部分,我无法找到合适的解决方案...

            // How do I convert following lines to Autofac Config?

            cb.RegisterCollection<StandardTask>("IList<StandardTask>").As<IList<StandardTask>>();

            cb.RegisterType<HealthMonitoringMessageDispatcherTask>().Named<StandardTask>("HealthMonitoringTask1").MemberOf("IList<StandardTask>");
            cb.RegisterType<HealthMonitoringMessageDispatcherTask>().Named<StandardTask>("HealthMonitoringTask2").MemberOf("IList<StandardTask>");

            cb.RegisterType<PurgeMessageDispatcherTask>().Named<StandardTask>("PurgeTask1");
            cb.RegisterType<PurgeMessageDispatcherTask>().Named<StandardTask>("PurgeTask2");

有什么建议么?小代码片段将非常有用。基本上我正在注册命名集合,然后将组件注入到集合中,该集合是我注册对象之一的构造函数参数。

4

1 回答 1

1

关于 Autofac 中配置如何工作的文档在这里。除非您使用的是 4.0 测试版,否则您可能正在查看3.x XML 配置样式

你想出了组件注册。要将键/名称添加到注册中,只需添加该属性。

<component type="Service"
           service="IService"
           name="the-key-goes-here" />

命名集合不支持 XML 配置。如果您在使用它们时遇到困难并且无法继续使用它们,IEnumerable<T>那么最好将它们留在模块中并通过配置注册模块。

<modules>
  <module type="MyModule" />
</modules>
于 2015-09-11T14:22:30.247 回答