人们普遍认为,在您的应用程序周围传递IoC容器并像服务定位器一样使用它是不好的做法.
我更喜欢只在我的应用程序的复合根中使用容器,并倾向于只调用Resolve() - 解析我的应用程序中的顶级对象并回复容器以将依赖项注入对象图中较低的类.
Castle Windsor最近添加了一个scoped生活方式,您可以在"using"块中调用container.BeginScope().在此"使用"块中,解析使用范围生活方式注册的组件将在"使用"块的持续时间内每次返回相同的实例.
container.Register(Component.For().LifestyleScoped()); using (container.BeginScope()) { var a1 = container.Resolve(); var a2 = container.Resolve(); Assert.AreSame(a1, a2); }
问:鉴于BeginScope()是在容器上的扩展方法,我看不出一个范围的生活方式可能,除非该容器被传来传去的应用程序(我真的不想做)一起使用.有没有人有任何关于范围生活方式可以使用的地方/方式的例子?
谢谢,
汤姆