Web Api 2 + OWIN 3 + NInject.Web.WebApi.OwinHost,仅在启动时出错

vm2*_*013 9 rest ninject asp.net-web-api owin

我正在为我的DI构建一个带有Web API2,Owin 3和NInject Owinhost的rest API.

使用NInject提供的示例,我通过它创建一个"HttpConfiguration"对象并在startup.cs中调用NInject扩展方法,我收到一个错误:

激活HttpConfiguration时出错可以使用多个匹配的绑定.匹配绑定:1)从HttpConfiguration绑定到方法2)HttpConfiguration的自绑定3)从HttpConfiguration绑定到常量值激活路径:1)请求HttpConfiguration

建议:1)确保只为HttpConfiguration定义了一次绑定.

我的代码如下Startup.cs:

 public void Configuration(IAppBuilder app)
    {
        Logger.Info("Entering Startup");

        config = new HttpConfiguration();

        ConfigureOAuth(app);

        // Web API configuration and services
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter("Bearer"));

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new {id = RouteParameter.Optional}
            );

        var appXmlType =
            config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(
                t => t.MediaType == "application/xml");
        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

        app.UseNinjectMiddleware(CreateKernel);

        app.UseNinjectWebApi(config);

        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

        Logger.Info("Exiting Startup");

    }


    public static StandardKernel CreateKernel()
    {
        kernel = new StandardKernel();
        kernel.Load(Assembly.GetExecutingAssembly());

        kernel.Bind<HttpConfiguration>().ToSelf().Named("TestHttpConfiguration");

        return kernel;
    }
Run Code Online (Sandbox Code Playgroud)

奇怪的是当我在浏览器中刷新页面时,错误发生了,这让我相信这只会在应用程序启动时发生.

所以我对此感到困惑.有人遇到过同样的问题吗?

谢谢

文森特

ngm*_*ngm 9

我有同样的错误,因为我安装了两个Ninject.Web.WebApi.WebHostNinject.Web.WebApi.OwinHost.

如果您查看OwinWebApiModule.csWebApiWebHostModule.cs的源代码,则两个Ninject模块都有绑定HttpConfiguration.

我删除了一个我不需要的东西,并且工作正常.

  • 您可能必须手动删除`/ bin`文件夹的内容.我有一个用于`Ninject.Web.WebApi.WebHost`的DLL文件,尽管事实上我删除了NuGet和References.即使是清洁和重建也没有删除它们.我手动删除了`/ bin`的所有内容,一切都重新开始了. (7认同)

vm2*_*013 5

UPDATE

在尝试了一切之后,我设法让它工作......从头开始一个新项目.我有幸做到这一点,因为它是我的新概念证明.

这里的主要区别是我使用Package Manager控制台而不是UI安装了所需的软件包(owin 3,ninject).我在这里按照此链接安装这些包.

然后我注意到其中一个包上的错误消息,因为它正在寻找Owin 2依赖项并且找不到任何.我强制它使用-DependencyVersion Highest作为参数进行安装,它从一开始就运行良好.

除非我错过了,否则当我使用UI安装软件包时,我没有看到此错误.以前在我的其他项目中是否可能没有正确安装软件包?不确定.

希望这有助于某人.

  • 我发现问题是这个nuget包"Ninject.Web.WebApi"当使用版本3.2.0.0时,错误存在.一旦我将nuget包更新到版本3.2.4.0,一切都工作,没有任何额外的更改. (13认同)