2015-09-10 3 views
0

Я строю Autofac контейнера, как показано нижеКонфигурация Autofac - Как преобразовать раздел кода в Autofac Config

_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"); 

Любые предложения? Маленький фрагмент кода будет очень полезен. В основном я регистрирую с именем, а затем вставляя компоненты в коллекцию, которая является параметром конструктора одного из моих зарегистрированных объектов.

+0

Wich версия * Autofac * вы используете? 'RegisterCollection' устарел с версии 2.' IEnumerable 'всегда разрешима и будет включать все зарегистрированные компоненты для сервиса' T'. Следующая документация может помочь вам понять, как использовать коллекцию с помощью autofac http://docs.autofac.org/en/latest/resolve/relationships.html#enumeration-ienumerable-b-ilist-b-icollection-b –

ответ

1

Documentation on how configuration works in Autofac is here. Если вы не используете бета-версию 4.0, вы, вероятно, смотрите на 3.x XML configuration style.

Вы выяснили регистрацию компонентов. Чтобы добавить ключ/имя в регистрацию, просто добавьте этот атрибут.

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

Поддержка названных коллекций отсутствует. Если вы застряли, используя их и не можете перейти только к IEnumerable<T>, тогда лучше всего оставить их в модуле и зарегистрировать модуль через конфигурацию.

<modules> 
    <module type="MyModule" /> 
</modules> 
Смежные вопросы