Autofac:将OnActive添加到所有注册

本文关键字:注册 添加 OnActive Autofac | 更新日期: 2023-09-27 17:57:07

我需要为所有注册添加.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);

类似的事情可能吗?

谢谢

Autofac:将OnActive添加到所有注册

您可以创建自己的扩展方法,如下所示:

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>();