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