Autofac: Добавить OnAcactive для всех регистраций - PullRequest
5 голосов
/ 18 мая 2011

Мне нужно добавить .OnActivated(Initialize) ко всем регистрациям. Вот как я это делаю сейчас:

builder.RegisterType<A>()
    .OnActivated(Initialize);

builder.RegisterType<B>()
    .OnActivated(Initialize);

builder.RegisterType<C>()
    .OnActivated(Initialize);

void Initialize(IActivatedEventArgs<object> context)
{
    object obj = context.Instance;
    if (obj is IHasPostConstructor)        
        (obj as IHasPostConstructor).PostConstructor();        
}

Было бы здорово, если бы я мог упростить что-то вроде:

builder.RegisterType<A>();
builder.RegisterType<B>();
builder.RegisterType<C>();
builder.AllRegistrations.OnActivated(Initialize);

Возможно ли нечто подобное?

Спасибо

1 Ответ

6 голосов
/ 18 мая 2011

Вы можете создать свой собственный метод расширения следующим образом:

public static IRegistrationBuilder<T, ConcreteReflectionActivatorData, SingleRegistrationStyle>  RegisterWithInit<T>(this ContainerBuilder builder)
{
    return builder.RegisterType<T>.OnActivated(Initialize);
}

, а затем вы можете зарегистрироваться следующим образом:

builder.RegisterWithInit<A>();
builder.RegisterWithInit<B>();
builder.RegisterWithInit<C>();
...