在我的容器,我注册我的IModelBinder的和Autofac模型绑定提供商:Autofac不解析模型绑定依赖
我使用的是类本身的属性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类作为参数的端点时,我得到了与模型联编程序相关的“No parameterelss constructor”--exception。
任何想法?
更新:
感谢nemesv,事实证明,它最有可能没有任何意义调用RegisterWebApiModelBinders
中的Web API 2.本期已reported到Autofac。
要注册模型粘合剂,一个需要调用:
builder.RegisterType<RequestContextModelBinder>().AsModelBinderForTypes(typeof(RequestContext));
这很有道理。但是我仍然无法使它工作。通过将ModelBinderAttribute更改为不包含特定类型,似乎Autofac会选择正确的模型绑定器,但它仍不能解决模型绑定器中的依赖关系。我得到了“没有为这个对象定义的无参数构造函数” - 错误。 –
如果仍然得到“为该对象定义的无参数构造函数”。那么Autofac绝对不会拿起你的模型绑定器,否则你会得到一个不同的错误... – nemesv
似乎'RegisterWebApiModelBinders'方法不起作用。即使您没有在属性中指定类型,您也需要显式注册您的模型绑定器。但在这种情况下,您需要编写:'builder.RegisterType()。AsModelBinderForTypes(typeof(RequestContext));'。请试试看,如果它正在工作,那么我会用这个信息更新我的答案。 –
nemesv