7

オブジェクトが解決されるたびにトリガーされる Autofac コンテナーにグローバル コールバックを登録するにはどうすればよいですか?

リフレクションを使用して、オブジェクトにメソッドが呼び出されているかどうかを確認し、存在する場合はInitialize()それを呼び出したいと思います。ダックタイプにしたい、つまりインターフェイスは必要ありません。

ありがとう!

4

1 に答える 1

15

Autofacでは、IComponentRegistrationインターフェイスを使用してさまざまなライフタイムイベントをサブスクライブできます。

  • OnActivating
  • OnActivated
  • OnRelease

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また、コンポーネントがアクティブ化されるたびに、コンポーネントを登録したモジュールに関係なく、メソッドが呼び出されます。

于 2012-07-26T06:07:29.920 に答える