在OWIN中使用带有WebApi Self Hosted的Simple Injector时,为什么会出现此ActivationException?

MaY*_*YaN 7 self-hosting simple-injector asp.net-web-api owin asp.net-web-api2

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我然后使用我Main()的:

WebApp.Start(baseAddress, appBuilder => 
                new StartUp().Configuration(appBuilder, new ConfigReader()));
Run Code Online (Sandbox Code Playgroud)

但是当我尝试执行最后一行时,appBuilder.UseWebApi(config);我得到以下异常:

SimpleInjector.dll中发生了'SimpleInjector.ActivationException'类型的第一次机会异常

附加信息:给定类型IHostBufferPolicySelector不是具体类型.请使用其他一个重载来注册此类型.

完整堆栈:

发生SimpleInjector.ActivationException _HResult = -2146233088
_message =给定类型IHostBufferPolicySelector不是具体类型.请使用其他一个重载来注册此类型.
HResult = -2146233088 IsTransient = false Message =给定类型IHostBufferPolicySelector不是具体类型.请使用其他一个重载来注册此类型.Source = SimpleInjector
StackTrace:at SimpleInjector.Advanced.DefaultConstructorResolutionBehavior.VerifyTypeIsConcrete(Type implementationType)InnerException:

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

有相关线索的位置,但我不知道它如何与SimpleInjector?Self主机是一个Console App,它安装了以下软件包:

  • 简单的注入器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 Self Host v5.2.2

MaY*_*YaN 1

事实证明,只有当我检查到时,异常才会Common Language Runtime Exceptions出现thrown

当我取消选中该复选框时,一切都表现正常!这很奇怪!还把它包裹在一个Try-Catch (Exception)甚至没有抓住它的地方,这使得它更加有趣/奇怪!