让InRequestScope与Ninject和WebApi一起使用

时间:2013-12-09 21:35:32

标签: asp.net-web-api ninject

我有一个MVC4 / WebApi项目,我正在尝试与Ninject 3连接。我想在请求范围内的多个实体之间共享一个特定对象,但是我知道我需要提供一些InRequestScope(https://stackoverflow.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没有实现)。 / p>

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

任何人都可以提供一个正确的工作示例,说明如何在请求范围内的多个组件中注入相同的对象实例吗?

感谢。

1 个答案:

答案 0 :(得分:0)

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

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