在我的控制器中我有动作:
public void Post(NewCustomerModel model)
{
model.Save();
}
和模型:
public class NewCustomerModel
{
private readonly CustomerRepository repository;
public NewCustomerModel(CustomerRepository repository)
{
this.repository = repository;
}
public string Name { get; set; }
public void Save()
{
var customer = new Customer(Name);
repository.Save(customer);
}
}
我希望使用我配置的IoC容器来实例化此模型,并且应该通过读取请求中的值来设置Name
属性。
我设法让IoC容器通过创建自定义IModelBinder
来实例化模型:
public class MyCustomModelBinder : IModelBinder
{
private readonly IComponentContext componentContext;
public EntityModelBinder(IComponentContext componentContext)
{
this.componentContext = componentContext;
this.modelType = modelType;
}
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
object model = componentContext.Resolve(bindingContext.ModelType);
bindingContext.Model = model;
return true;
}
}
这很好用,存储库正在注入模型中。在此之后,我希望WebAPI框架接管并设置公共属性,但它不会:Name
属性为null。如果我没有使用此模型绑定器并使用默认的WebAPI框架,则会设置Name
属性,因此请求到模型映射没有任何问题。
我该如何做到这一点?