Asp.net web api 在OWIN中使用WebApi自托管的简单注入器时,为什么会出现这种ActivationException?

Asp.net web api 在OWIN中使用WebApi自托管的简单注入器时,为什么会出现这种ActivationException?,asp.net-web-api,owin,asp.net-web-api2,self-hosting,simple-injector,Asp.net Web Api,Owin,Asp.net Web Api2,Self Hosting,Simple Injector,我在OWIN中有一个非常简单的WebAPI v2.2自托管 public class StartUp { public void Configuration(IAppBuilder appBuilder, IConfigReader configReader) { var container = new Container(); container.Register<IConfigReader, ConfigReader>();

我在OWIN中有一个非常简单的WebAPI v2.2自托管

public class StartUp
{
    public void Configuration(IAppBuilder appBuilder, IConfigReader configReader)
    {
        var container = new Container();

        container.Register<IConfigReader, ConfigReader>();

        var config = new HttpConfiguration();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);
        appBuilder.UseWebApi(config);
    }
}
但是,当我尝试执行最后一行
appBuilder.UseWebApi(config)我得到以下异常:

“SimpleInjector.ActivationException”类型的首次意外异常 发生在SimpleInjector.dll中

其他信息:给定类型IHostBufferPolicySelector为 不是具体的类型。请使用其他重载之一进行注册 这种

完整堆栈:

SimpleInjector.ActivationException发生\u HResult=-2146233088
_message=给定类型IHostBufferPolicySelector不是具体类型。请使用其他重载之一注册此类型。
HResult=-2146233088 IsTransient=错误消息=给定类型 IHostBufferPolicySelector不是具体类型。请使用其中一种 其他重载用于注册此类型。Source=SimpleInjector
堆栈跟踪: 在SimpleInjector.Advanced.DefaultConstructorResolutionBehavior.VerifyTypeIsConcrete(类型 implementationType)InnerException:

问题不在于单个接口它看起来像是
SimpleInjector
试图为每个接口找到一个绑定;如果我为
IHostBufferPolicySelector
提供了一个虚拟实现,它会为一些其他接口抛出,例如
IEExceptionHandler

有一个相关的线程,但我不确定它与
SimpleInjector
的关系? Self-host是一个控制台应用程序,安装了以下软件包:

  • 简单注入器ASP.NET Web API集成v2.61
  • 简单注入器执行上下文范围v2.61
  • 简易喷油器v2.61
  • OWIN v1.0
  • Microsoft.Owin v2.0.2
  • Microsoft.Owin.Hosting v2.0.2
  • Microsoft ASP.NET Web API 2.2 OWIN v5.2.2
  • Microsoft ASP.NET Web API 2.2 OWIN自主机v5.2.2

事实证明,只有当我将
公共语言运行时异常检查到
抛出时,异常才会出现


当我取消选中复选框时,一切正常!真奇怪!另外,将它包装在一个
Try Catch(异常)
中甚至无法捕获它,这使得它更加有趣/werid

根据简单喷油器:

您显示的异常是“第一次机会异常”。这些 异常由简单注入器抛出,但它们被捕获并 由简单的注入器处理,它们不会在调用堆栈中冒泡。 您可能在某些调试器输出窗口中看到它们,但是 他们很正常,没什么可担心的


IHostBufferPolicySelector
的注册在哪里?什么是
IHostBufferPoslicySelector
以及什么是可用的(默认)实现?请发布完整的堆栈跟踪。@MaYaN:这不是完整的堆栈跟踪。请包括所有内部异常。尤其是这里的一切。因此,我们需要查看从请求开始到现在的完整堆栈跟踪。@Steven,这确实是完整的堆栈,我现在更新了问题以包括所有其他位,但仅此而已。很好,您了解了如何获得完整的堆栈跟踪。你能用这些信息更新你的问题吗?Steven,我在问题中发布的是我得到的
all
,即使我用
Try-Catch
包装断点,也不会达到断点,因此无法对其执行
ToString()
。我在上面发布的内容是直接从VisualStudio中抛出的
对话框中获得的。很抱歉,
全局应用程序域异常处理程序中甚至没有捕获到该异常,但是如果没有关于触发该异常的代码的更多信息,任何人都无法帮助您。@Steven-遇到这个问题时有点太晚了,我认为,如果我们在VisualStudio中运行诊断工具,并通过从该异常事件中选择历史调试来捕获调用堆栈,堆栈跟踪将变得可用。
WebApp.Start(baseAddress, appBuilder => 
                new StartUp().Configuration(appBuilder, new ConfigReader()));