Как выполнить пользовательскую инициализацию с помощью автозапуска - PullRequest
4 голосов
/ 23 февраля 2010

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

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

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

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

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

Обновление: Я использую Autofac-2.1.10.754-NET35

1 Ответ

7 голосов
/ 24 февраля 2010
.OnActivating(e => e.Instance.Initialize(...))

должен сделать трюк.

Вы также можете исследовать модуль Startable (см. Запись Startable в вики Autofac ).

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

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

для объединения параметра конфигурации с другими зависимостями конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...