使用 Entity Framework 的 WCF 服务中存储库模式的依赖注入
Dependency injection for repository pattern in WCF service using Entity Framework
我有接受 IRepository 的 WCF 服务。
IRepository repository;
public MyWcfService(IRepository repository)
{
this.repository= repository;
}
存储库需要基于 Entity Framework。它有方法 Get
、Save
等...
我的问题是,如果我每次从这个 WCF 服务 class 调用方法时都想创建和处理 DbContext
,我应该如何实现这个存储库 class。
P.S。我正在使用 Ninject 库来解析依赖项
如果你想将你的数据库上下文作为你的存储库的依赖项 class 那么你的存储库 class 应该实现 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
在 WCF 中使用依赖注入有点不同。您需要连接到实例创建管道和服务主机。
有一个特定的 Ninject 扩展可以使这更容易:Ninject.extensions.Wcf
https://github.com/ninject/Ninject.Extensions.Wcf
还有这个博客将解释如何使用它:
http://blog.tonysneed.com/2011/10/24/using-ninject-with-wcf-services/
注意:这有点复杂,很抱歉 link-only 参考...其他人可以根据此自由创建完整答案。
我有接受 IRepository 的 WCF 服务。
IRepository repository;
public MyWcfService(IRepository repository)
{
this.repository= repository;
}
存储库需要基于 Entity Framework。它有方法 Get
、Save
等...
我的问题是,如果我每次从这个 WCF 服务 class 调用方法时都想创建和处理 DbContext
,我应该如何实现这个存储库 class。
P.S。我正在使用 Ninject 库来解析依赖项
如果你想将你的数据库上下文作为你的存储库的依赖项 class 那么你的存储库 class 应该实现 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
在 WCF 中使用依赖注入有点不同。您需要连接到实例创建管道和服务主机。
有一个特定的 Ninject 扩展可以使这更容易:Ninject.extensions.Wcf
https://github.com/ninject/Ninject.Extensions.Wcf
还有这个博客将解释如何使用它:
http://blog.tonysneed.com/2011/10/24/using-ninject-with-wcf-services/
注意:这有点复杂,很抱歉 link-only 参考...其他人可以根据此自由创建完整答案。