WCF服务中使用实体框架的存储库模式的依赖项注入

本文关键字:存储 模式 依赖 注入 框架 服务 实体 WCF | 更新日期: 2023-09-27 18:00:49

我有接受IRepository的WCF服务。

IRepository repository;
public MyWcfService(IRepository repository)
{
    this.repository= repository;
}

存储库需要基于实体框架。它有GetSave等方法…

我的问题是,如果我想在每次从这个WCF服务类调用方法时创建和处理DbContext,我应该如何实现这个存储库类。

附言:我正在使用Ninject库来解析依赖项

WCF服务中使用实体框架的存储库模式的依赖项注入

如果您想将数据库上下文作为存储库类的依赖项,那么存储库类应该实现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/

注意:这有点涉及,所以很抱歉链接仅引用。。。其他人可以在此基础上自由创建完整的答案。