Установить AutoFac для использования PropertiesAutowired (true) по умолчанию? - PullRequest
3 голосов
/ 02 августа 2010

Есть ли способ, которым я могу настроить AutoFac для использования PropertiesAutowired (true) по умолчанию для всех регистрируемых типов.

т.е. я не хочу использовать ".PropertiesAutowired (true)" все время

var builder = new ContainerBuilder();
builder.RegisterType<Logger>()
    .PropertiesAutowired(true)
    .SingleInstance();

Ответы [ 2 ]

9 голосов
/ 03 августа 2010

Это можно сделать с помощью модуля, например,

class InjectPropertiesByDefaultModule : Autofac.Module {
    protected override void AttachToComponentRegistration(
        IComponentRegistration registration,
        IComponentRegistry registry) {
            registration.Activating += (s, e) => {
                e.Context.InjectProperties(e.Instance);
            };
    }
}

Затем:

builder.RegisterModule<InjectPropertiesByDefaultModule>();

Я думаю, вы, возможно, неправильно поняли параметр true для PropertiesAutowired - он определяеткак циклические зависимости поддерживаются и, вероятно, должны оставаться false.Чтобы эмулировать настройку true, вы можете присоединиться к Activated вместо Activating выше.

Однако, если это вообще возможно, используйте инъекцию конструктора даже для «необязательных» зависимостей, таких как ILog.Это приводит к более чистым компонентам (например, поля могут быть сделаны readonly), а зависимости более понятны (все они в конструкторе, и нет смысла гадать о значении отдельных свойств.)

Рассмотрите только использованиевнедрение свойства, когда существует несколько конфигураций приложения, а в некоторых конфигурациях зависимость действительно отсутствует.

Даже в этих случаях шаблон «Null Object» обычно лучше подходит.

0 голосов
/ 02 августа 2010

Нет, нет.Однако, если вы регистрируете типы массово или по соглашению, это будет проще, например, с помощью builder.RegisterAssemblyTypes(..).

Обновление : Да, см. @ Николас ответ .

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