Model view controller NHibernate和MVC实例变量

Model view controller NHibernate和MVC实例变量,model-view-controller,nhibernate,Model View Controller,Nhibernate,我正在学习NHibernate/MVC,并创建了一个示例应用程序,让用户存储自己的书籍列表。我遇到的问题是,我的存储库需要当前登录用户,但我不知道在MVC会话中保存用户详细信息的最佳方法是什么。我正在使用表单身份验证 登录页面 var user = userRepository.login(username,password); Session["user"] = user; var user = Session["user"] as user; var books = bookRepos

我正在学习NHibernate/MVC,并创建了一个示例应用程序,让用户存储自己的书籍列表。我遇到的问题是,我的存储库需要当前登录用户,但我不知道在MVC会话中保存用户详细信息的最佳方法是什么。我正在使用表单身份验证

登录页面

var user = userRepository.login(username,password);

Session["user"] = user;
var user = Session["user"] as user;

var books = bookRepository.getByGenre("Fiction",user);
列表页

var user = userRepository.login(username,password);

Session["user"] = user;
var user = Session["user"] as user;

var books = bookRepository.getByGenre("Fiction",user);
这是在每个http请求之间传递实例变量的推荐方法吗


感谢Steve Sanderson MVC的书中写道

在ASP.NETMVC中,最好的一种操作方法是一个纯函数 它的参数。我的意思是action方法只读取数据 从其参数和仅向其参数和写入数据 不引用HttpContext或会话,也不引用 控制器

我相信推荐的方法是使用一个定制的模型绑定器,它从备份存储中提供您的用户id。模型绑定器允许您创建一个不关心数据来自何处的控制器

这篇文章是一个很好的开始


那么mvc中的每个操作都会有另一个参数,即当前用户?拥有控件可以访问用户对象的全局属性不是更容易吗?更容易的是,建议不。我相信从控制器中提取会话数据的想法是为了允许可伸缩性,并消除控制器在拥有全局变量集时需要做的任何假设。它还避免了在任何单元测试中模拟http会话的需要。