3

コンテナにLazyOfTComponentLoaderを登録し、ここでLazy<T>指定されているように解決することで、CastleWindsorのコンポーネントを遅延解決することができます。

container.Register(
   Component.For<ILazyComponentLoader>().ImplementedBy<LazyOfTComponentLoader>(),
   Component.For<ISomeService>().ImplementedBy<ServiceImpl>().LifestyleTransient()
   );

var lazy = container.Resolve<Lazy<ISomeService>>();

lazy.Value.DoSomething();

ただし、resolve呼び出しでLazyを指定しなくても、コンポーネントが常になしとして解決されるように、コンポーネントをコンテナーに登録することは可能ですか?Lazy<T>

具体的には、コンストラクターインジェクションを使用するときに、MVCプロジェクトのコントローラーにレイジーコンポーネントをインジェクトする方法を考えています。

編集:ここLazy<ISomeService> someServiceに表示されているように、コントローラーのコンストラクターでパラメーターとして指定できます。ただし、登録プロセスを通じてコン​​ポーネントが遅延して解決されるようにする方法はありますか?

4

1 に答える 1

3

コンポーネントの遅延ロードされたインスタンスを解決する場合は、を実行する必要がありますResolve<Lazy<ISomeService>>()。関数lazy.Valueは、コンポーネントの実際の解決を行います。解決を行う場合は、コンポーネントを直接取得します。

Lazyを使用せずに最初に使用したときにのみ解決されるコンポーネントが本当に必要な場合は、インターセプターを作成することをお勧めします。

頑張って、Marwijn。

于 2013-03-18T11:58:18.043 に答える