我正在使用Web API2,Owin 3和NInject Owinhost为我的DI构建一个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;
}
奇怪的是,当我在浏览器中刷新页面时,错误发生了,这让我相信这只会在应用程序启动时发生。
所以我对此感到困惑。有人遇到过同样的问题吗?
由于
文森特
答案 0 :(得分:9)
我遇到了同样的错误,因为我安装了8261409764/events?fields=end_time,start_time,timezone,id,name
和Ninject.Web.WebApi.WebHost
。
如果您查看OwinWebApiModule.cs和WebApiWebHostModule.cs的来源,则两个Ninject模块都会绑定Ninject.Web.WebApi.OwinHost
。
我删除了一个我不需要的东西,而且工作正常。
答案 1 :(得分:5)
<强>更新强>
尝试了一切后,我设法让它工作......从头开始一个新项目。我有幸做到这一点,因为它是我的新概念证明。
这里的主要区别是我使用Package Manager控制台而不是UI安装了所需的软件包(owin 3,ninject)。我按照link这里安装了这些软件包。
然后我注意到其中一个包上的错误消息,因为它正在寻找Owin 2依赖项并且找不到任何。我强制它使用-DependencyVersion Highest作为参数安装,它从一开始就运行良好。
除非我错过了,否则当我使用UI安装软件包时,我没有看到此错误。以前在我的其他项目中是否可能没有正确安装软件包?不确定。
希望这有助于某人。