c# - 简单注入(inject)器 - "Lazy"实例化一个依赖于首次使用的单例

标签 c# singleton inversion-of-control simple-injector

我们有一个控制台应用程序可以做很多不同的事情。很多不同的东西,它的作用取决于我们作为命令行参数传入的内容。它最初是以这种方式构建的,因此它只占用我们构建服务器中的一个许可位置,在建议将其拆分时我遇到了一大堆阻力。

此应用程序使用用于 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/

相关文章:

c# - 在 Windows 通用应用程序中获取设备/操作系统版本和国家/语言代码

C# 序列化在子类中删除属性?

c# - Unity 容器构建失败

php - PHP 单例类是否以某种方式在请求之间共享?

c# - "share"/resolve (ServiceStack) Service within (ServiceStack) Service 是个坏主意吗?

java - java IoC框架如何保证线程安全?

c# - 如何获取绘图板笔压力值?

javascript - 如何在 Javascript 中读取 ASP.net Session 对象?

c++ - 使用单例类从所有类到达

ios - 我真的需要单例上的共享实例吗?