0

以下のようにAutofac Containerを構築しています

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

以下のように、Autofac ContainerBuilder をビルド/構成するための ConfigureContainer メソッドがあります。

        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