使用Ninject注入依赖于WCF和MVC请求参数的特定EF DbContext

时间:2011-08-23 10:10:38

标签: .net entity-framework-4.1 ninject ninject.web.mvc ninject-interception

我有一个 MVC3和WCF REST 服务,这些服务都在Azure中托管,并且使用SQL Azure和Entity Framework 4.1作为ORM。

我想介绍一种分片方案,以提高此设置的可扩展性。

由于Azure是无状态托管环境,因此在我的系统中,每个请求都填充了一个用户标识,我可以使用该标识生成我的哈希,以创建指向所需数据库的连接字符串(按用户分片)。

目前我正在使用带有WCF和MVC扩展的Ninject将EF DbContext注入我的存储库。上下文生命周期在请求范围内(我的休息服务使用aspnetcompatibility)。

我的问题是:如何拦截此注入并使用正确的连接字符串填充DbContext?例如在WCF中使用自定义ServiceHostFactory?

我看过Ninject.Interception扩展,但在激活我的服务和控制器之前,我无法弄清楚如何设置它来拦截HTTP请求。

这样我就可以在不重构现有代码的情况下使用分片。

1 个答案:

答案 0 :(得分:1)

我发现我大肆过度思考这个问题。

Bind<MyEntities>().ToMethod(ctx => GetShardedContext());

GetShardedContext()使用HttpContext.Current或WebOperationContext.Current中相应的构造函数参数创建实例。