如何在Autofac容器上注册全局回调,每当解析任何对象时都会触发该回调?
我想使用反射并检查对象是否有一个名为Initialize()
的方法,如果有,则调用它。我希望它是鸭子类型,即不需要接口。
谢谢!
答案 0 :(得分:14)
在Autofac中,您可以使用IComponentRegistration
界面订阅各种终身事件:
您可以通过创建IComponentRegistration
并覆盖Module
方法获取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
方法,无论您在哪个模块中注册该组件。