通过在容器中注册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所示。但是,有没有办法确保在注册过程中懒惰地解决组件?
答案 0 :(得分:3)
如果要解析延迟加载的组件实例,则需要执行Resolve<Lazy<ISomeService>>()
。函数lazy.Value将执行组件的实际解析。如果你能做出决定,你将直接获得你的组件。
如果你真的想要一个只在第一次使用而不使用Lazy时解析的组件,你就可以使用编写一个拦截器。
祝你好运, Marwijn。