オブジェクトが解決されるたびにトリガーされる Autofac コンテナーにグローバル コールバックを登録するにはどうすればよいですか?
リフレクションを使用して、オブジェクトにメソッドが呼び出されているかどうかを確認し、存在する場合はInitialize()
それを呼び出したいと思います。ダックタイプにしたい、つまりインターフェイスは必要ありません。
ありがとう!
オブジェクトが解決されるたびにトリガーされる Autofac コンテナーにグローバル コールバックを登録するにはどうすればよいですか?
リフレクションを使用して、オブジェクトにメソッドが呼び出されているかどうかを確認し、存在する場合はInitialize()
それを呼び出したいと思います。ダックタイプにしたい、つまりインターフェイスは必要ありません。
ありがとう!
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
また、コンポーネントがアクティブ化されるたびに、コンポーネントを登録したモジュールに関係なく、メソッドが呼び出されます。