依赖注入 – 单例中依赖注入数据连接的最佳方法

我的应用程序中有一些“缓存”对象,通过依赖注入(Ninject)获得IRepository(自定义存储库模式契约).这些对象仅使用存储库一次,但它们具有刷新功能,强制所有者自行刷新.它们是单例,只创建一次,ManualResetEvent确保在加载之前阻止所有请求.

IRepositories是基于EF CodeFirst的,所以可以简单地确保连接关闭并永远保持对DbContext的引用吗?

我已经禁用了代理和延迟加载,所以…可以从缓存对象的根目录到数百个这些缓存的POCO实体的长引用?

干杯.

解决方法

我们参考Julie Lerman的评论,
  http://msdn.microsoft.com/en-us/magazine/ee532098.aspx?sdmr=JulieLerman
建议是有几个/许多较小的上下文,并且在Web场景的情况下,每个调用创建一个新的上下文.
虽然她在实体框架和AppFabric中写了关于二级缓存的文章.

随着时间的推移,上下文将包含许多对象,并且性能将相应地下降.
我认为这个网站有一些关于EF性能的好建议.
例如生成的视图.
http://msdn.microsoft.com/en-us/data/hh949853

我个人的建议,我不能说是最好的做法,但是从关心表现的人那里,每个电话的小范围内容一个坚实的长期妥协.
使用生成的视图可以使初始加载时间尽可能小.

您可以通过以下方式管理永久DBContext,以便从上下文中删除未使用的对象.或者使用带有事件的缓存库来执行此操作.不是一个小任务.

我会对您最终选择的解决方案感兴趣.请发布.

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...