在 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>();