【发布时间】:2016-03-23 13:27:21
【问题描述】:
我正在使用 DryIOC.WebAPI 来解析我的 APIControllers。
WebAPI 配置如下:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.EnableCors();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Startup.IocContainer.WithWebApi(config);
Startup.IocContainer.RegisterWebApiControllers(config);
}
}
它工作得很好,直到我忘记在 IOC 容器中创建映射。在这种情况下,依赖解析器无法使用 DryIOC 创建 APIController 的实例。
当这种情况发生时,它会退回到默认的 WebAPI 解析器,然后会出现“无默认构造函数”错误。
这对我来说是不受欢迎的行为。如果 DryIOC 决议失败,我希望事情停在那里 - 没有回退到默认实现,也没有关于没有默认构造函数的不准确消息。我想知道 DryIOC 无法解决的类型,以便我修复它。
我怎样才能做到这一点?
【问题讨论】:
-
您可以自己覆盖默认解析器,然后再将其传递给 DryIOC 并将其停在那里
-
我在这里提出了 DryIOC 拉取请求:bitbucket.org/dadhi/dryioc/pull-requests/15/…
-
在 DryIOC 框架中做出这样的改变是相当极端的。您应该利用 web api 允许的可扩展性。在查看 DryIOC 源如何替换默认解析器而不是包装它之后,我将编辑我的答案以展示如何包装 DryIOCResover 并抛出你想要的错误
-
@reach4thelasers 找到了一些文档 re:
IDependencyResolver这可能与您的要求相冲突。
标签: c# asp.net-web-api dryioc