1
從Ninject對象實例在我的總體佈局頁,我需要訪問SessionManager實例僅僅是爲了顯示其用戶登錄。從內部_Layout.cshtml獲取MVC
我有工作如下(_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內核。您最好使用'ViewModel'或用您自定義的'IPrincipal'類型覆蓋'User'屬性,它將提供必要的信息(http://stackoverflow.com/a/10524305)。至於控制器,是的,將'SessionManager'注入控制器(或基本控制器)是好的。 – haim770
感謝您的回覆。我同意Views不應該對此負責,但ViewModel如何在這裏提供幫助?這不是一個真正的視圖 - 它是一個查看插槽的主頁面。爲每個操作填充虛擬機是不可行的,只是爲了讓佈局顯示誰登錄。 –
這就是爲什麼我建議第二個解決方案 – haim770