dependency-injection - Ninject Owin 请求范围静默失败

标签 dependency-injection ninject owin

问题 - Ninject 内核总是返回新实例,即使它们的范围是请求。

- 我将 OWIN 与 SystemWeb 主机包一起使用,以允许我使用 IIS。

- 该项目依赖于一个 API 应用程序,该应用程序安装了所有必要的 Ninject/owin 库。

app.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(config);

- 在转换为 OWIN 之前,一切都按预期工作。

- 只创建一个内核实例。

- 注册了一些全局过滤器,它们在请求范围的对象上设置了某些属性。
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            var accountService = Startup.Kernel.Get<IAccountService>();
            // some changes to accountService etc.

- 当其他过滤器过滤管道时,然后尝试获取 IAccountService 的实例,它们总是返回一个新实例。

根据我自己的研究工作,这似乎是一个已知问题。任何想法,将不胜感激。谢谢。

最佳答案

我见过类似的问题,也许这就是你的情况。
InRequestScope在以下情况下不起作用:

带有 OWIN 的 Web API 独立组件 .该程序集具有 Ninject 和 Web API,并且 OWIN 安装了它。

空的 ASP.Net web 项目,其中 只是引用了之前的程序集 . ASP.Net Web 项目没有安装 Web API 或 Ninject,它只有允许 OWIN 托管在 ASP.Net 之上的包。

在那个设置中,Ninject 似乎工作得很好;除了 InRequestScope 被忽略并始终解析对象的不同实例。

问题是 VS 不会将所有需要的程序集复制到结果目录中,因为它们没有被应用程序直接引用,也没有被 OWIN 程序集使用,而只是由 Ninject 动态加载。

要解决此问题,只需 NuGet Ninject.Extensions.ContextPreservation在您的 ASP.Net Web 项目中。

也许这只是您的问题或类似。看看Ninject Extensions并尝试确定您需要的未添加到结果目录中的扩展名。

关于dependency-injection - Ninject Owin 请求范围静默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30039271/

相关文章:

javascript - angularjs 在不同文件中为同一模块定义服务

Ninject 内核在更新 Microsoft.AspNet.Identity.Owin 2.2.0 后在启动时被处理

nhibernate - 为每个 ViewModel 创建一个 ISession 实例

asp.net-mvc - 中等信任度下 MVC Controller + 依赖注入(inject) (Ninject) 的问题

owin - 如何通过 OWIN 实现 global.asax 事件

asp.net - 错误: SignalRRouteExtension.Mapconnection is obsolete. use MapSignalR in Owin Startup class

javascript - AngularJS 模块声明顺序

testing - 在 Grails Spock 规范测试中注入(inject)依赖项

c# - 带有 Microsoft.Extensions.DependencyInjection 和 asp.net web api 2 的拦截器,用于横切关注点,例如日志记录

oauth - 如何在两个站点中共享 OAuth 承载身份验证