我有接收IRepository的WCF服务。
IRepository repository;
public MyWcfService(IRepository repository)
{
this.repository= repository;
}
存储库需要基于实体框架。它有方法Get
,Save
等......
我的问题是,如果我每次从此WCF服务类调用方法时都要创建和处置DbContext
,我应该如何实现此存储库类。
P.S。我正在使用Ninject库来解决依赖关系
答案 0 :(得分:0)
如果要将数据库上下文作为存储库类的依赖项,那么存储库类应实现 IDisposable ,并且在 Dispose 方法中应该处置数据库上下文
您的存储库应在http请求处理结束时处理,因此您应该使用InRequestScope()注册 IRepository 。您还应该使用InRequestScope()注册您的WCF服务,这样它就不会超过IRepository。
以下是 InRequestScope()的文档:
https://github.com/ninject/Ninject.Web.Common/wiki/InRequestScope
和ninject中对象范围的区别:
https://github.com/ninject/ninject/wiki/Object-Scopes
答案 1 :(得分:0)
在WCF中使用依赖注入有点不同。您需要挂钩实例创建管道和服务主机。
有一个特定的Ninject扩展来使这更容易:Ninject.extensions.Wcf
https://github.com/ninject/Ninject.Extensions.Wcf
还有这个博客将解释如何使用它:
http://blog.tonysneed.com/2011/10/24/using-ninject-with-wcf-services/
注意:这有点涉及,对于仅链接引用感到抱歉......其他人可以根据此自由创建完整的答案。