我们有一个控制台应用程序可以做很多不同的事情。很多不同的东西,它的作用取决于我们作为命令行参数传入的内容。它最初是以这种方式构建的,因此它只占用我们构建服务器中的一个许可位置,在建议将其拆分时我遇到了一大堆阻力。
此应用程序使用用于 IoC 的简单注入(inject)器...问题是,我们有一堆未用于任何给定操作的单例服务,并且它们会在每次使用时加载...这太慢了。我只想加载实际用于任何给定操作的依赖项。
看起来有很多关于 Lazy<TService>
的文档,但实际上这很令人沮丧。惰性构造函数似乎不知道它正在使用的容器,因此它必须使用无参数构造函数或值工厂,而这些构造函数或值工厂似乎也不知道依赖项所在的容器。
我想用 Simple Injector 做些什么?我一直在玩各种版本的 Lazy 泛型,但我似乎无法得到我想要的。
最佳答案
简单的注入(inject)器让您可以 register factory delegates .
// From the link above, chapter "Lazy"
container.Register<Lazy<IMyService>>(
() => new Lazy<IMyService>(container.GetInstance<RealService>));
另一种可能性是使用 decorator . Simple Injector 也允许您这样做。与第一个解决方案(您必须调用 lazyService.Value.DoSomething();
)相比的优势在于,您可以使此更改透明化。 IE。装饰器实现服务,您可以调用 decoratedService.DoSomething();
关于c# - 简单注入(inject)器 - "Lazy"实例化一个依赖于首次使用的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43643984/