在我的容器,我註冊我的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