Почему я получаю это ActivationException при использовании простого инжектора с самостоятельным размещением WebApi в OWIN?

у меня очень простой веб-Api v2.2 self hosted in 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);
    }
}

когда я затем использую на моем Main() as:

WebApp.Start(baseAddress, appBuilder => 
                new StartUp().Configuration(appBuilder, new ConfigReader()));

однако, когда я пытаюсь выполнить последнюю строку appBuilder.UseWebApi(config); Я получаю следующее исключение:

исключение первого шанса типа ' SimpleInjector.ActivationException' произошло в SimpleInjector.dll файлы

дополнительная информация: Данный тип IHostBufferPolicySelector не конкретный тип. Пожалуйста, используйте один других перегрузок для регистрации этот тип.

Полный Стек:

SimpleInjector.ActivationException произошло _HResult=-2146233088
_message=данный тип IHostBufferPolicySelector не является конкретным типом. Пожалуйста, используйте одну из других перегрузок для регистрации этого типа.
HResult=-2146233088 IsTransient=ложное сообщение=заданный тип IHostBufferPolicySelector не является конкретным типом. Пожалуйста, используйте один из другой перегрузки для регистрации этого типа. Source=SimpleInjector
Трассировка стека: на SimpleInjector.Прогрессивный.DefaultConstructorResolutionBehavior.VerifyTypeIsConcrete (Тип implementationType) InnerException:

проблема не в том, что один интерфейс выглядит как SimpleInjector пытается найти привязку для каждого интерфейса; если я предоставляю фиктивную реализацию для IHostBufferPolicySelector он бросает для какого-то другого интерфейса, например IExceptionHandler etc.

есть связанная нить здесь но я не уверен, как он относится к SimpleInjector? Self host-это консольное приложение, в котором установлены следующие пакеты:

  • простой инжектор ASP.NET интеграция Web API v2.61
  • простой контекст выполнения инжектора область v2.61
  • простой инжектор v2.61
  • OWIN v1.0
  • Microsoft.Долг П2.0.2
  • Microsoft.Оуин.Размещающий П2.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

2 ответов


согласно простому инжектору:

исключения, которые вы показываете, являются "исключениями первого шанса". Эти исключения брошены простым инжектором но они уловлены и обрабатывается простым инжектором, и они не будут пузыриться в стеке вызовов. Возможно, вы видите их в некотором окне вывода отладчика, но они вполне нормальны и не о чем беспокоиться.


оказалось, что исключение всплывает только тогда, когда у меня есть Common Language Runtime Exceptions проверен до thrown

когда я снимите флажок все, ведет себя как обычно! что странно! также обернув его в Try-Catch (Exception) даже не ловит его, что делает его еще более интересным / werid!