Ninject 单例 vs CS 单例

Ninject Singleton vs CS Singleton

有人可以告诉我 C# 单例 Class 和 Ninject 单例之间的区别吗?

我现在的老板想将单例 class 转换为 Ninject 单例。

这与我 Ninject 定义单例而不是 class 本身定义单例的方法论背道而驰。虽然我们在整个项目中使用 Ninject,但在需要的地方使用 Ninject 是有意义的。但对我来说,class 应该定义 Singleton 而不是 Ninject。

提前致谢!

你说的这两个概念有明显的区别。

单例 class 意味着在任何给定时间只存在一个 class 实例。

A Ninject 单例只是意味着 Ninject 只会将 class 的单个实例注入到您的应用程序中。没有什么可以阻止某人手动创建他们自己的实例。

如果您确实需要单例,请不要依赖 Ninject 为您完成。但是如果你只在你的 DI 框架中使用一个 class 的单个实例用于它的所有注入,请使用 Ninject.

容器的Singleton design pattern和单例生活方式有很大区别。在 Ninject 中注册为 'singleton' 只是意味着告诉 Ninject 只为你创建一个实例。

Ninject 文档 explains 很好地说明了为什么单例设计模式是个坏主意。

The problem with this is you basically have to lock down your type. Doing things this way will make your code end up rigid and inflexible. In particular, it'll be very difficult to unit test code that's implemented this way

单例模式的问题在于您违反了依赖倒置原则,使您的代码依赖于一个实现。单例基本上是 ambient context,在大多数情况下应该避免环境上下文。