Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 从MVC中的_Layout.cshtml中的Ninject获取对象实例_Asp.net Mvc_Ninject_Ninject.web.mvc - Fatal编程技术网

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

Asp.net mvc 从MVC中的_Layout.cshtml中的Ninject获取对象实例,asp.net-mvc,ninject,ninject.web.mvc,Asp.net Mvc,Ninject,Ninject.web.mvc,在我的主布局页面中,我需要访问SessionManager实例,以显示登录的用户 我让它按如下方式工作(_Layout.cshtml): @使用Ninject @{ var kernel=新的标准内核(); var sm=kernel.Get(); } ... 等 接下来我使用如下实例: <p>Logged in as @(sm.LoggedInUser.Name)</p> 以@身份登录(sm.LoggedInUser.Name) 现在可以了,但这不整洁吗?我可以用

在我的主布局页面中,我需要访问SessionManager实例,以显示登录的用户

我让它按如下方式工作(_Layout.cshtml):

@使用Ninject
@{
var kernel=新的标准内核();
var sm=kernel.Get();
}
...
等
接下来我使用如下实例:

<p>Logged in as @(sm.LoggedInUser.Name)</p>
以@身份登录(sm.LoggedInUser.Name)

现在可以了,但这不整洁吗?我可以用更好的方法吗?像这样创建一个StandardKernel实例可以吗(我假设它是单例的)


我曾考虑让所有控制器从基本控制器继承,并将SessionManager注入基本控制器,但这似乎有点过头了。

通常,NInject MVC扩展插件插入MVC的依赖项解析程序基础结构,您应该能够通过它解析您的服务:

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

视图不应该关心诸如会话管理和Ninject内核之类的事情。您最好使用
ViewModel
或使用自定义
IPrincipal
类型覆盖
User
属性,以提供必要的信息()。对于控制器,是的,将
SessionManager
注入控制器(或基本控制器)是可以的。感谢您的回复。我同意视图不应该对此负责,但ViewModel在这方面有什么帮助呢?它不是一个真正的视图-它是一个母版页,可以查看插槽。仅仅为了让布局显示登录者而为每个操作填充VM是不可行的。这就是我建议第二种解决方案的原因
var sm = DependencyResolver.Current.GetService<SessionManager>();