2

Windsor が型をインスタンス化するときにカスタム処理を実行することは可能ですか?

次のようなもの:

        container.Register(
                  AllTypes.Pick()
                      .FromAssembly(Assembly.GetExecutingAssembly())
                      .BasedOn<MyMarkerInterface>()
                      .WhenInstantiating(instance => // do some stuff with this instance)
                      .Configure(component => component.Startable().LifeStyle.Singleton)
                      .WithService.Base());

現在、IStartableを使用しています。「開始」コード (つまり、カスタム処理) は同一であるため、このロジックを各クラスから移動するとよいでしょう。

ありがとう!ブライアン

4

1 に答える 1

5

OnCreateメソッドのようなものですか?

    container.Register(
              AllTypes.FromAssembly(Assembly.GetExecutingAssembly())
                  .BasedOn<MyMarkerInterface>()
                  .WithService.Base()
                  .OnCreate((kernel, instance) => instance.CreatedAt = DateTime.Now)
);

シングルトンはデフォルトのライフスタイルであるため、明示的に述べる必要はありません。

ただし、Startable 機能の動作と比較して、ここでは動作が少し異なることに注意してください。

  • コンポーネントが起動可能な場合、できるだけ早く (必要なすべての依存関係が利用可能になったときに) インスタンス化され、コンテナー自体によって起動されます。
  • コンポーネントがコンテナーから返される前に OnCreate が呼び出されますが、事前に作成されるわけではありません。したがって、このコンポーネントをまったくプルしない場合その OnCreate は呼び出されません。

また、ドキュメントには OnCreate が施設に住んでいると記載されていますが、それはもはや真実ではありません (そうです、ドキュメントを更新する必要があります)。このメソッドはそのまま使用できます。

于 2010-03-22T18:35:16.123 に答える