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

时间:2011-09-30 17:04:13

标签: c# .net entity-framework-4.1 ninject

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

我没有像示例中那样使用Unity for DI,而是使用Ninject。目前我正在按如下方式配置Ninject,以便仅为每个Web请求实例化一个数据库工厂实例(因此每个请求一个datacontext类(首先使用EF 4.1代码btw))

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

我很好奇这种方法是否足够?或者让工厂类处理每个http请求的datacontext实例化会更好(如果我将来为非基于Web的前端设计,可能还需要每个线程)?如果是的话,那里有什么例子可以解决这个问题吗?

或者是否有更好的解决方案来解决这个问题?

1 个答案:

答案 0 :(得分:4)

您应该使用.InRequestScope()代替.InScope(ctx => HttpContext.Current)。它确保使用适当的作用域,具体取决于是通过WCF还是通过ASP.NET MVC请求实例。不幸的是,要充分利用这一点,您必须使用http://teamcity.codebetter.com中当前的连续集成构建。另见

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

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