2010-02-23 2 views
3

Я добавляю autofac к существующему проекту, а некоторые из реализаций службы требуют, чтобы их метод Initialize вызывался и передавал информацию о конфигурации. В настоящее время я использую код:Как выполнить пользовательскую инициализацию с помощью autofac

builder.Register(context => 
       { 
       var service = new SqlTaxRateProvider(
     context.Resolve<IUserProvider>() 
    ); 
       service.Initialize(config); 
       return service; 

       } 
).As<ITaxService>() 
.SingleInstance(); 

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

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

builder.RegisterType<SqlTaxRateProvider>() 
.As<ITaxService>() 
.OnCreated(service=> service.Initialize(config)) 
.SingleInstance(); 

Update: Я использую Autofac-2.1.10.754-NET35

+1

Лучшим вариантом было бы отказаться от метода Initialize в первую очередь. Вместо этого используйте ** Constructor Injection **. –

+0

Я согласен, на каком-то этапе я обойду его, я просто искал быстрое решение, облегчающее мои первоначальные изменения. –

ответ

5
.OnActivating(e => e.Instance.Initialize(...)) 

должен Покажи фокус.

Вы также можете изучить модуль Startable (см. Startable entry in the Autofac wiki).

Предложение Марка сделать инициализацию в конструкторе также является хорошим. В этом случае следует использовать

.WithParameter(new NamedParameter("config", config)) 
+1

Стабильный модуль? Я чувствую, что слышал имя где-то ... или подобное –

+0

Спасибо, Ник, я думаю, что NamedParameter поможет устранить метод Initialize() –

+1

@Krzysztof yep, Apache Avalon живет на :) –

Смежные вопросы