如何使用工厂模式实现每个请求/线程的datcontext

本文关键字:请求 线程 datcontext 何使用 工厂 模式 实现 | 更新日期: 2023-09-27 18:10:21

使用这个示例项目作为指导,我正在设置一个新项目。我的项目将遵循相同的基本架构,除了mvc项目,我还将有一个wcf web服务项目(或可能servicestack.net)

我没有像示例中那样使用Unity for DI,而是使用Ninject。目前,我配置Ninject如下,每个web请求只实例化一个数据库工厂实例(因此每个请求一个数据上下文类(首先使用EF 4.1代码btw))

 kernel.Bind<IDatabaseFactory>()
       .To<DatabaseFactory>()
       .InScope(ctx => HttpContext.Current);

我很好奇这种方法是否足够?或者让工厂类处理每个http请求的数据上下文的实例化(如果我将来为非基于web的前端设计,可能是每个线程)会更好吗?如果有的话,有没有什么例子可以说明如何做到这一点?

或者有一个完全更好的解决方案来处理这个问题?

如何使用工厂模式实现每个请求/线程的datcontext

您应该使用.InRequestScope()而不是.InScope(ctx => HttpContext.Current)。它确保根据实例是通过WCF还是通过ASP请求来使用适当的作用域。净MVC。不幸的是,要充分利用这一点,您必须使用来自http://teamcity.codebetter.com的当前持续集成构建。参见

https://github.com/ninject/ninject.extensions.wcf

https://github.com/ninject/ninject.web.mvc