5
如何在Autofac容器上注册全局回调?Autofac - 对象解析时的全局回调
我想使用反射,并检查一个对象是否有一个名为Initialize()
的方法,如果是的话就调用它。我希望它是鸭子型的,即不需要接口。
谢谢!
如何在Autofac容器上注册全局回调?Autofac - 对象解析时的全局回调
我想使用反射,并检查一个对象是否有一个名为Initialize()
的方法,如果是的话就调用它。我希望它是鸭子型的,即不需要接口。
谢谢!
在Autofac可以使用IComponentRegistration
接口订阅各种一生的事件:
您可以通过创建一个Module
得到IComponentRegistration
实例并覆盖AttachToComponentRegistration
方法:
public class EventModule : Module
{
protected override void AttachToComponentRegistration(
IComponentRegistry componentRegistry,
IComponentRegistration registration)
{
registration.Activated += OnActivated;
}
private void OnActivated(object sender, ActivatedEventArgs<object> e)
{
e.Instance.GetType().GetMethod("Initialize").Invoke(e.Instance, null);
}
}
现在你只需要在你的容器制造商注册您的模块:
var builder = new ContainerBuilder();
builder.RegisterModule<EventModule>();
和OnActivated
方法将每个组件激活没有母校在哪个模块已注册的组件后调用。