这个问题与 Ninject 没有特别的关系。这更像是一个一般性的编码问题,但我将其发布在这里,以防万一在 Ninject 中可能有更好的方法来处理这个问题,而不是我正在尝试做的事情。
我想知道是否可以从 Global.asax 中的实例全局访问 Ninject 标准内核。
这是代码:
public class MvcApplication : NinjectHttpApplication
{
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
// MVC global registration, routing and filtering code goes here...
}
protected override IKernel CreateKernel()
{
return Container;
}
private static IKernel Container
{
get
{
IKernel kernel = new StandardKernel();
kernel.Load(new ServiceModule(), new RepositoryModule());
return kernel;
}
}
}
如果我有一些类,例如不与控制器接口的外观类,我想在其中开始依赖链,我的理解是我应该使用:
_className = kernel.Get<IClassName>();
但是,我知道的唯一方法是创建 Ninject 标准内核的新实例,但如果我理解正确,创建 Ninject 内核的新实例并不是一个好主意,因为这基本上是创建第二个内核。
那么,是否可以从我的应用程序中的任何位置访问在应用程序启动时在 Global.asax 中实例化的现有内核,或者是否有更好的方法完全做到这一点?
问候,
弗雷德城堡