有人可以告诉我C#Singleton Class和Ninject Singleton之间的区别吗?
我现在的老板想将Singleton类转换为Ninject Singleton。
这违背了我的方法,我会让Ninject定义单例,而不是类本身定义单例。虽然我们在整个项目中使用Ninject,但在需要的地方使用Ninject是有意义的。但是,对我来说,类应该定义Singleton而不是Ninject。
提前致谢!
答案 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,在大多数情况下应该阻止环境上下文。