mah*_*chR 9 ninject bootstrapper asp.net-mvc-3
我将Ninject.MVC3软件包从2.2.1.0更新到2.2.2.0.在我通过BootStrapper.Kernel属性访问Kernel对象之前,但在新版本中,Kernel属性被标记为已过时.我收到警告说
'Public ReadOnly Property Kernel As Ninject.IKernel'已过时:'不要将Ninject用作服务定位器'.
在新版本中是否有不同的方式来访问内核?
如果你有一个类(由于某种原因)需要从Ninject内核中检索对象,你可以将内核作为类中注入的属性/构造函数参数之一.从明确声明特定类正在使用内核的意义上讲,这种模式更好,而不是像服务定位器模式那样始终使用它.
这假设Ninject会自动将内核的实例绑定添加到自身.我知道它曾经这样做,但如果不这样做,你可以手动添加绑定.
之所以将其标记为过时并将在未来更改为内部的原因是人们倾向于使用Ninject作为服务定位器(如果可以的话).但Service Locator是一个不应该使用的反模式.由于我们不想提供有助于构建设计糟糕的软件的功能,因此将来会将其删除.
如果这需要对代码进行大量更改,则表明您的代码正在遭受这种不适依赖注入,并且您确实应该将其更改为更好的设计.
Kernel参数,它将接收实例做注射).如果你真的想留在服务定位器,即使几乎每个人都告诉你不要,你必须自己保留静态参考.