コンテナに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
に表示されているように、コントローラーのコンストラクターでパラメーターとして指定できます。ただし、登録プロセスを通じてコンポーネントが遅延して解決されるようにする方法はありますか?