我目前拥有InstanceContextMode = InstanceContextMode .PerCall
的WCF RESTful服务。我这样做是因为服务方法与Entity Framework模型交互,我读到我应该使用PerCall
而不是Single
。现在,我想添加一个返回大型数据集的新服务方法。我最初的想法是在服务启动时关闭一个线程,并缓存数据集,这样当调用服务方法时,我不必点击数据库...我只是返回缓存。但问题是我不能这样做,因为我正在使用PerCall
,因此在实例被销毁之后,我的缓存也是如此。
我的问题是,我有哪些缓存选项?我是否真的需要PerCall
或者我可以将其设为单身,但是确保每次通话时EF上下文都是新的吗?
答案 0 :(得分:1)
你对EF上下文和生命周期是正确的;它应该尽可能短暂。在网络(服务)场景中,它通常意味着“每个请求/呼叫”(最长)。
当然,您可以自己处理生命周期,但这是一个带有DI的IoC容器真正发光的场景。您只需将服务和EF上下文注册为“每个请求”,将缓存注册为单例,容器将为您完成繁重的工作并注入正确的依赖项。如果需要,您还可以进行更细粒度的生命范围确定。
一些最常见的:
有很多很好的教程和指南可以用WCF设置最流行的IoC容器,比如“How to Use Dependency Injection (Ninject) with WCF Services”。