Почему я получаю это 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!