自动延迟解决Castle Windsor中的组件

时间:2013-03-17 21:22:00

标签: asp.net-mvc dependency-injection castle-windsor lazy-initialization constructor-injection

通过在容器中注册LazyOfTComponentLoader并按指定here解析Lazy<T>,可以懒惰地解决Castle Windsor中的组件:

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

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

lazy.Value.DoSomething();

但是,是否可以注册容器中的某个组件,以便始终解析为Lazy<T>,而无需在其中指定Lazy解决电话?

具体来说,我想知道如何在使用构造函数注入时将Lazy组件注入MVC​​项目中的控制器。

编辑:您可以将Lazy<ISomeService> someService指定为控制器构造函数中的参数,如here所示。但是,有没有办法确保在注册过程中懒惰地解决组件?

1 个答案:

答案 0 :(得分:3)

如果要解析延迟加载的组件实例,则需要执行Resolve<Lazy<ISomeService>>()。函数lazy.Value将执行组件的实际解析。如果你能做出决定,你将直接获得你的组件。

如果你真的想要一个只在第一次使用而不使用Lazy时解析的组件,你就可以使用编写一个拦截器。

祝你好运, Marwijn。