3

通过在容器中注册 LazyOfTComponentLoader 并按照此处Lazy<T>指定的方式解析 a ,可以延迟解析 Castle Windsor 中的组件:

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

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

lazy.Value.DoSomething();

但是,是否可以在容器中注册一个组件,以便它始终被解析为 aLazy<T>而无需在解析调用中指定 Lazy ?

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

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

4

1 回答 1

3

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

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

祝你好运,马尔维恩。

于 2013-03-18T11:58:18.043 回答