使用此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的前端设计,可能还需要每个线程)?如果是的话,那里有什么例子可以解决这个问题吗?
或者是否有更好的解决方案来解决这个问题?
答案 0 :(得分:4)
您应该使用.InRequestScope()
代替.InScope(ctx => HttpContext.Current)
。它确保使用适当的作用域,具体取决于是通过WCF还是通过ASP.NET MVC请求实例。不幸的是,要充分利用这一点,您必须使用http://teamcity.codebetter.com中当前的连续集成构建。另见