从MVC中的_Layout.cshtml中获取Ninject中的对象实例

时间:2015-11-10 15:20:06

标签: asp.net-mvc ninject ninject.web.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注入基本控制器,但它似乎略高于顶层。

1 个答案:

答案 0 :(得分:4)

通常,NInject MVC扩展插入MVC的依赖性解析器基础架构,您应该能够通过它解析您的服务:

var sm = DependencyResolver.Current.GetService<SessionManager>();