我有一个 MVC3和WCF REST 服务,这些服务都在Azure中托管,并且使用SQL Azure和Entity Framework 4.1作为ORM。
我想介绍一种分片方案,以提高此设置的可扩展性。
由于Azure是无状态托管环境,因此在我的系统中,每个请求都填充了一个用户标识,我可以使用该标识生成我的哈希,以创建指向所需数据库的连接字符串(按用户分片)。
目前我正在使用带有WCF和MVC扩展的Ninject将EF DbContext注入我的存储库。上下文生命周期在请求范围内(我的休息服务使用aspnetcompatibility)。
我的问题是:如何拦截此注入并使用正确的连接字符串填充DbContext?例如在WCF中使用自定义ServiceHostFactory?
我看过Ninject.Interception扩展,但在激活我的服务和控制器之前,我无法弄清楚如何设置它来拦截HTTP请求。
这样我就可以在不重构现有代码的情况下使用分片。
答案 0 :(得分:1)
我发现我大肆过度思考这个问题。
Bind<MyEntities>().ToMethod(ctx => GetShardedContext());
GetShardedContext()使用HttpContext.Current或WebOperationContext.Current中相应的构造函数参数创建实例。