0

我目前有一个带有InstanceContextMode = InstanceContextMode .PerCall. 我这样做是因为服务方法与实体框架模型交互,并且我读到我应该使用PerCall而不是Single. 现在,我想添加一个返回大型数据集的新服务方法。我最初的想法是在服务启动时关闭一个线程,并缓存数据集,这样当调用服务方法时,我就不必访问数据库......我只需返回缓存。但问题是我不能这样做,因为我正在使用PerCall,所以在实例被销毁后,我的缓存也是如此。

我的问题是,我有哪些缓存选项?我真的需要PerCall还是可以将其设为单例,但只需确保每次调用的 EF 上下文都是新的?

4

1 回答 1

1

您对 EF 上下文和生命周期是正确的;它应该尽可能短暂。在 web(-service) 场景中,它通常意味着“每个请求/调用”(最长)。

当然,您可以自己处理生命周期,但这是一个带有 DI 的 IoC 容器真正闪耀的场景。您只需将服务和 EF 上下文注册为“每个请求”并将缓存注册为单例,容器将为您完成繁重的工作并注入正确的依赖项。如果需要,您还可以进行更细粒度的生命周期范围界定。

一些最常见的:

有很多很好的教程和指南可用于使用 WCF 设置最流行的 IoC 容器,例如“如何使用 WCF 服务使用依赖注入 (Ninject) ”。

于 2013-01-28T22:29:49.563 回答