让 InRequestScope 与 Ninject 和 WebApi 一起工作

Posted

技术标签:

【中文标题】让 InRequestScope 与 Ninject 和 WebApi 一起工作【英文标题】:Getting InRequestScope working with Ninject and WebApi 【发布时间】:2013-12-27 04:37:43 【问题描述】:

我有一个 MVC4/WebApi 项目,我正在尝试与 Ninject 3 连接。我想在请求范围内的多个实体之间共享一个特定对象,但是我知道我需要提供一些InRequestScope (https://***.com/a/10592203/173225) 的某种实现。我查看了 GitHub 上的源代码,它似乎只是返回 HttpContext.Current。我试过了:

var messages = new List<string>();
kernel.Bind<IList<string>>()
    .ToMethod(x => messages)
    .WhenMemberHas<ServiceResultMessagesAttribute>()
    .InScope(x => HttpContext.Current);

没有运气。我还尝试按照https://groups.google.com/d/msg/ninject/rC2vhj8yvBU/NAIkNA-QrAAJ 中的建议为 Ninject.Web.WebApi (#9018) 使用最新的“不稳定”Nuget 包,但我得到了同样的错误(get_InRequestScope 方法没有实现)。

至于 GitHub 上的来源,在撰写相关文件的最后一次更新时是 11 个月到一年多以前,所以我不知道这是否与不稳定的 Nuget 包一起使用(特别是考虑到 Ninject 的文档状态)。

谁能提供一个适当的工作示例,说明如何在请求范围内的多个组件中注入同一对象实例?

谢谢。

【问题讨论】:

【参考方案1】:

您将需要来自 nuget 或其他地方的 Ninject.Web.Common 引用并使用 InRequestScope 方法。

var messages = new List<string>();
    kernel.Bind<IList<string>>()
        .ToMethod(x => messages)
        .WhenMemberHas<ServiceResultMessagesAttribute>()
        .InRequestScope();

【讨论】:

感谢您的回答。我可能无法验证这一点,因为 a) 我忘记了我试图让它工作的具体实例,b) 我们早就转向 Autofac,它可以轻松实现我们需要的功能.如果我可以挖掘一些示例代码来证明问题,一旦我可以验证它,我会接受这个答案。

以上是关于让 InRequestScope 与 Ninject 和 WebApi 一起工作的主要内容,如果未能解决你的问题,请参考以下文章

Ninject Rebind 在运行时,可以用作功能切换吗?

ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象

如何让导航栏下拉菜单与身体重叠?

无法让 PostCSS 与 Webpack 一起使用

如何让 Tailwind.css 与 Gatsby.js 一起工作?

如何让32位OFFICE 2003与64位OFFICE 2013共存