0

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

我想引入一个分片方案来增加这个设置的可扩展性。

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

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

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

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

这将允许我在不重构现有代码的情况下使用分片。

4

1 回答 1

1

事实证明我在很大程度上过度思考了这个问题。

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

GetShardedContext() 使用来自 HttpContext.Current 或 WebOperationContext.Current 的适当构造函数参数创建实例。

于 2011-08-23T13:31:07.917 回答