我在我的web api服务中使用Simple Injector IoC容器。目前,我遇到了一个我发现很难调查的错误。
容器配置如下:
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle();
container.Register<IQueryHandler<LoginQuery, AccountDTO>, LoginQueryHandler>(
Lifestyle.Scoped);
当请求进入Web服务时,它们不是被路由到控制器,而是由自定义消息处理程序处理。这些处理程序是通过继承DelegatingHandler
类创建的(有关详细信息,请参阅here)。
然后,自定义消息处理程序将查看请求并调用特定处理程序来处理请求。这样做如下:
// For the sake of the example (and my testing), I have hard coded the types
// below, but usually these are pulled from the request.
Type handlerType = typeof(IQueryHandler<,>)
.MakeGenericType(typeof(AccountQuery), typeof(AccountDTO));
try
{
// Something does wrong here
dynamic handler = this.handlerFactory.Invoke(handlerType);
// Code execution never reaches this point, exception is not caught
... other code
}
// I have also just tried catching the general exception
catch (TargetInvocationException ex)
{
// do something
}
我当前的问题是,当尝试从处理程序工厂(简单注入器)调用处理程序时出现问题。当我进行调试时,只要我逐步执行该行,我就会想到Web服务遇到异常,然后返回(我的客户端只得到一个&#34;内部服务器错误&#34;消息)。尽管有try / catch,但没有例外,所以我完全不知道发生了什么。我认为我可能有一些配置错误的简单注射器,但我不知道是什么(简单的注射器验证成功)。
有没有人建议我在这里做些什么来弄清楚发生了什么?