【发布时间】:2015-04-18 16:17:21
【问题描述】:
我正在为我的 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;
}
奇怪的是,当我在浏览器中刷新页面时,错误出现了,这让我相信这只会在应用程序启动时发生。
所以我对此感到困惑。有没有人遇到过同样的问题?
谢谢
文森特
【问题讨论】:
-
我刚开始在一个新项目中遇到这个问题。抛出此错误的中间件是:app.UseNinjectWebApi(config);当我评论说一切都按预期工作时。我仍在四处挖掘以弄清楚发生了什么。
-
愚蠢的猜测,但是当您将 HttpConfiguration 绑定到 TestHttpConfiguration 时会发生什么?
-
您好,感谢您回复我,遗憾的是我没有设法开始我的原始项目。请参阅下面的答案,我通过从头开始并使用控制台安装软件包对其进行了排序。和你一样,是 app.useNInjectWebApi 导致了错误,但无论我如何处理它,它在这个 httpconfiguration 上一直失败。不确定这会帮助你,我希望它会。告诉我。
-
是的,我最终做了同样的事情。我不确定发生了什么,但从头开始对我也有效。
-
很高兴您也对其进行了排序。
标签: rest asp.net-web-api ninject owin