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
方法將每個組件激活沒有母校在哪個模塊已註冊的組件後調用。