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

发布于 2024-12-01 02:32:33 字数 547 浏览 5 评论 0原文

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

我想引入一种分片方案来提高此设置的可扩展性。

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

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

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

我查看了 Ninject.Interception 扩展,但我不知道如何将其设置为在激活我的服务和控制器之前拦截 HTTP 请求。

这将使我能够使用分片而无需重构现有代码。

I have an MVC3 and a WCF REST service that are both hosted in Azure and are using SQL Azure with Entity Framework 4.1 as the ORM.

I want to introduce a sharding scheme to increase the scalability of this setup.

As Azure is a stateless hosting environment, in my system every single request is populated with a user id that I can use to generate my hash to create a connection string that points to the desired database (sharding by user).

Currently I am using Ninject with the WCF and MVC extensions to inject the EF DbContext into my repositories. The context lifecycle is in the request scope (My rest service uses aspnetcompatibility).

My question is: How can I intercept this injection and populate the DbContext with the correct connection string? Using a custom ServiceHostFactory in WCF for example?

I have had a look at the Ninject.Interception extension but I could not figure out how to set it up to intercept the HTTP request prior to activating my services and controllers.

This would allow me to use sharding without refactoring my existing code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷乱花海 2024-12-08 02:32:33

我发现我对这个问题想得太多了。

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

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

I turns out I was massively overthinking the problem.

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

Where GetShardedContext() creates the instance with the appropriate constructor arguments from the HttpContext.Current or WebOperationContext.Current.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文