在 MVC 中从 _Layout.cshtml 中获取 Ninject 中的对象实例
Get an object instance from Ninject from within _Layout.cshtml in MVC
在我的主布局页面中,我需要访问一个 SessionManager 实例来显示哪个用户已登录。
我的工作方式如下 (_Layout.cshtml):
@using Ninject
@{
var kernel = new StandardKernel();
var sm = kernel.Get<SessionManager>();
}
<!DOCTYPE html>
<html>
...
etc...
然后再往下我使用这样的实例:
<p>Logged in as @(sm.LoggedInUser.Name)</p>
现在可以了,但是这样不整洁吗?我能以更好的方式做到这一点吗?像这样创建一个 StandardKernel 实例可以吗(我假设它是一个单例)?
我考虑过让所有控制器都继承自一个基本控制器,并将 SessionManager 注入到基本控制器中,但似乎有点过头了。
通常 NInject MVC 扩展插入 MVC 的依赖解析器基础结构,您应该能够通过它解析您的服务:
var sm = DependencyResolver.Current.GetService<SessionManager>();
在我的主布局页面中,我需要访问一个 SessionManager 实例来显示哪个用户已登录。
我的工作方式如下 (_Layout.cshtml):
@using Ninject
@{
var kernel = new StandardKernel();
var sm = kernel.Get<SessionManager>();
}
<!DOCTYPE html>
<html>
...
etc...
然后再往下我使用这样的实例:
<p>Logged in as @(sm.LoggedInUser.Name)</p>
现在可以了,但是这样不整洁吗?我能以更好的方式做到这一点吗?像这样创建一个 StandardKernel 实例可以吗(我假设它是一个单例)?
我考虑过让所有控制器都继承自一个基本控制器,并将 SessionManager 注入到基本控制器中,但似乎有点过头了。
通常 NInject MVC 扩展插入 MVC 的依赖解析器基础结构,您应该能够通过它解析您的服务:
var sm = DependencyResolver.Current.GetService<SessionManager>();