Ninject Singleton vs CS Singleton

时间:2015-03-10 02:50:52

标签: c# singleton ninject

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

我现在的老板想将Singleton类转换为Ninject Singleton。

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

您所谈论的两个概念之间存在明显差异。

Singleton类意味着在任何给定时间只存在一个类的实例。

Ninject Singleton只是意味着Ninject只会向您的应用程序注入一个类的单个实例。没有什么可以阻止某人手动创建自己的实例。

如果您确实需要Singleton,请不要依赖Ninject为您完成。但是如果你只是你的DI框架使用一个类的单个实例进行所有注入,那么使用Ninject。

答案 1 :(得分:0)

容器所具有的Singleton design pattern和Singleton Lifestyle之间存在很大差异。将某些内容注册为' singleton'在Ninject中只是意味着告诉Ninject只为你创建一个实例。

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

  

这个问题是你基本上必须锁定你的类型。   以这种方式做事会使你的代码变得僵硬和不灵活。   特别是,对单元测试代码进行单元测试非常困难   以这种方式实施

Singleton模式的问题在于您违反了依赖性反转原则,使您的代码依赖于实现。单例基本上是ambient context,在大多数情况下应该阻止环境上下文。