2014-12-03 67 views
0

你好:)我正在構建一個MVC5/EF6系統,其中存儲了許多用戶類型的學生信息。當用戶登錄某個關於該用戶的信息時存儲在Session中;用戶名,UserTypeID等不同的用戶有不同的權限,我經常需要從會話的用戶信息我的ActionResult方法中的每個控制器:創建類返回會話用戶信息

private Student GetCurrentStudentInfo() 
{ 
    var currentuser = (SessionModel)Session["LoggedInUser"]; 
    var student = _db.Student.Find(currentuser.UserID); 
    return student; 
} 

我有我的控制器,底部這個方法,我根據我何時需要這些信息從每種方法調用。它從當前登錄的用戶獲取用戶標識並返回配置文件信息。我想能夠之一:

  1. 提供給我的所有控制器
  2. 或者創建一個類變量,我可以在我的控制器的頂部使用,這將返回此信息這種方法:

    public class RegistrationWizardController : Controller 
    { 
        private readonly DefaultContext _db = new DefaultContext(); 
    
        private UserInfo _userInfo = new UserInfo(); 
    } 
    

我很新的MVC編碼一般,所以任何幫助/意見/其他建議是值得歡迎的。謝謝!

回答

0

你有幾個選項。

兩者中的第一個(也是更容易)是讓所有的控制器都從一個公共基礎控制器繼承。要做到這一點,就可以對默認的控制器延伸的基本控制器:

public class BaseController : Controller 
{ 
    protected Student GetCurrentStudentInfo() //protected so we can access this method from derived classes 
    { 
     var currentuser = (SessionModel)Session["LoggedInUser"]; 
     var student = _db.Student.Find(currentuser.UserID); 

     return student; 
    } 
} 

現在,改變你的控制器繼承您剛剛創建的基本控制器:

public class RegistrationWizardController : BaseController 
{ 
    public ActionResult AnAction() 
    { 
     var student = this.GetCurrentStudentInfo(); //calls the method inherited from BaseController 
    } 
} 

你有另一種選擇是,以使用依賴注入。這比以前的方法更復雜一些,抽象得多。有很多依賴注入框架,我最喜歡的是Ninject(http://www.ninject.org/)。這可能更接近這樣做的「行業標準」,我會鼓勵你至少研究一下,但我認爲這個問題的範圍會略微超出範圍(先做一些邊閱讀)。如果你決定實施它並陷入困境,請發佈另一個問題。

+0

非常感謝您的迅速回復!現在我要實現基本控制器,但會確保查看依賴注入!再次感謝 – 2014-12-03 00:49:40