Web Api 2 + OWIN 3 + NInject.Web.WebApi.OwinHost,仅在启动时出错
Web Api 2 + OWIN 3 + NInject.Web.WebApi.OwinHost, error at startup only
我正在使用 Web API2、Owin 3 和 NInject Owinhost 为我的 DI 构建 rest API。
使用 NInject 提供的示例,我创建了一个 "HttpConfiguration" 对象并调用了 startup.cs 中的 NInject 扩展方法,我得到一个错误:
Error activating HttpConfiguration
More than one matching bindings are available.
Matching bindings:
1) binding from HttpConfiguration to method
2) self-binding of HttpConfiguration
3) binding from HttpConfiguration to constant value
Activation path:
1) Request for HttpConfiguration
Suggestions:
1) Ensure that you have defined a binding for HttpConfiguration only once.
我的代码如下 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;
}
奇怪的是,当我在浏览器中刷新页面时,错误出现了,这让我相信这只发生在应用程序启动时。
所以我对此感到困惑。有人遇到过同样的问题吗?
谢谢
文森特
更新
在尝试了所有方法之后,我设法让它工作...从头开始一个新项目。我有幸这样做,因为这对我来说是一个新的概念证明。
这里的主要区别是我使用包管理器控制台而不是 UI 安装了所需的包(owin 3,ninject)。我在这里 link 安装了这些软件包。
然后我注意到其中一个包上有一条错误消息,因为它正在寻找 Owin 2 依赖项但找不到任何依赖项。我使用 -DependencyVersion Highest 作为参数强制安装它,它从一开始就运行良好。
除非我错过了它,否则我在使用 UI 安装软件包时没有看到此错误。有没有可能这个包之前没有在我的其他项目上正确安装?不确定。
希望这对某人有所帮助。
我遇到了同样的错误,因为某些原因我同时安装了 Ninject.Web.WebApi.WebHost
和 Ninject.Web.WebApi.OwinHost
。
如果您在源代码中查找 OwinWebApiModule.cs and WebApiWebHostModule.cs,两个 Ninject 模块都具有 HttpConfiguration
的绑定。
我删除了不需要的那个,一切正常。
我正在使用 Web API2、Owin 3 和 NInject Owinhost 为我的 DI 构建 rest API。
使用 NInject 提供的示例,我创建了一个 "HttpConfiguration" 对象并调用了 startup.cs 中的 NInject 扩展方法,我得到一个错误:
Error activating HttpConfiguration More than one matching bindings are available. Matching bindings: 1) binding from HttpConfiguration to method 2) self-binding of HttpConfiguration 3) binding from HttpConfiguration to constant value Activation path: 1) Request for HttpConfiguration
Suggestions: 1) Ensure that you have defined a binding for HttpConfiguration only once.
我的代码如下 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;
}
奇怪的是,当我在浏览器中刷新页面时,错误出现了,这让我相信这只发生在应用程序启动时。
所以我对此感到困惑。有人遇到过同样的问题吗?
谢谢
文森特
更新
在尝试了所有方法之后,我设法让它工作...从头开始一个新项目。我有幸这样做,因为这对我来说是一个新的概念证明。
这里的主要区别是我使用包管理器控制台而不是 UI 安装了所需的包(owin 3,ninject)。我在这里 link 安装了这些软件包。
然后我注意到其中一个包上有一条错误消息,因为它正在寻找 Owin 2 依赖项但找不到任何依赖项。我使用 -DependencyVersion Highest 作为参数强制安装它,它从一开始就运行良好。
除非我错过了它,否则我在使用 UI 安装软件包时没有看到此错误。有没有可能这个包之前没有在我的其他项目上正确安装?不确定。
希望这对某人有所帮助。
我遇到了同样的错误,因为某些原因我同时安装了 Ninject.Web.WebApi.WebHost
和 Ninject.Web.WebApi.OwinHost
。
如果您在源代码中查找 OwinWebApiModule.cs and WebApiWebHostModule.cs,两个 Ninject 模块都具有 HttpConfiguration
的绑定。
我删除了不需要的那个,一切正常。