【发布时间】:2014-01-18 07:52:47
【问题描述】:
在我的容器中,我已经注册了 IModelBinder 和 Autofac 模型绑定器提供程序:
builder.RegisterWebApiModelBinders(Assembly.GetExecutingAssembly());
builder.RegisterWebApiModelBinderProvider();
我正在使用类本身的 ModelBinder 属性将我的模型绑定器绑定到一个类:
[ModelBinder(typeof(RequestContextModelBinder))]
public class RequestContext
{
// ... properties etc.
}
还有模型绑定器本身,有依赖关系:
public class RequestContextModelBinder : IModelBinder
{
private readonly ISomeDependency _someDependency;
public RequestContextModelBinder(IAccountsRepository someDependency)
{
_someDependency = someDependency;
}
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
// ... _someDependency is null
}
}
通过控制器,我可以验证 Autofac 是否正确注入了 ISomeDependency 和模型绑定器。但是没有注入对模型绑定器的依赖。
当访问一个以 RequestContext 类作为参数的端点时,我得到了与模型绑定器相关的“无参数构造函数”异常。
有什么想法吗?
更新:
感谢 nemesv,事实证明,在 Web API 2 中调用 RegisterWebApiModelBinders 很可能没有任何意义。Autofac 的问题是 reported。
要注册模型绑定器,需要调用:
builder.RegisterType<RequestContextModelBinder>().AsModelBinderForTypes(typeof(RequestContext));
【问题讨论】:
标签: dependency-injection asp.net-web-api inversion-of-control autofac