让 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 无法跟踪具有相同键的多个对象