我正在使用Entity Framework构建一个MVC3应用程序,其中几乎所有操作都只允许授权用户使用.因此,我经常需要引用成员实体.我已经尝试了不同的缓存方式的方法,并提出了一种非常快的方法.但是我想对我正在做的事情的风险/缺点提出一些建议/看法.
我已经定义了一个工厂类来检索使用Ninject"注册"的Member实例,这样我就可以在任何需要它的地方使用它.Ninject绑定是"会话范围"(我将在稍后解释).工厂方法首先检查Session以查看它是否包含先前创建的Member实例.如果Session没有,则例程通过EF从底层数据库创建实例,将值存储在Session中并返回它.
因为对Member实例的一些访问是EF调用,所以我必须确保EF对象上下文也在会话范围内(我学到了一种很难的方法,即对最初在不同上下文中创建的Member实例调用EF例程不会工作得太好了).由于工厂和对象上下文是通过Ninject创建的,因此我必须为Ninject定义一个Session范围.
我在这里找到了一个代码片段,我可以修改它以满足我的需求.但是这是一个如此简单的片段,我想知道Ninject(或Ninject MVC)是否有"本机"提供这种能力的原因.这让我想知道我是否正在通过我正在做的事情来解决问题.
我确实认识到在Session中存储东西有很多方面你需要编程,其中最主要的是存储对象可以随时"消失"(即,你总是必须有一种方法来重新创建)它,当你得到它).但是虽然这增加了足够的复杂性,我不想为很多对象做这件事,但为单个Member对象做这件事并不是那么困难.
无论如何,我们将非常感谢有关会话确定Ninject绑定和在MVC应用程序的Session中存储EF实体的建议和反馈.
Ninject本身没有这样的范围有几个原因:
你的实现Ninject-wise没有问题.但正如我之前所说,你必须非常谨慎地将数据放入会话范围.我认为您还应该考虑其他方法来缓存数据,以便在使用此方法之前逐出数据,例如,使用NHibernate我建议调查2级缓存.如果您仍然决定使用会话数据,更好的方法是将其放入会话而不是具有Ninject会话范围,因为它允许缩放应用程序.
归档时间: |
|
查看次数: |
1849 次 |
最近记录: |