使用依赖注入创建WebAPI模型

时间:2016-09-14 08:18:00

标签: c# asp.net-web-api dependency-injection

在我的控制器中我有动作:

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属性,因此请求到模型映射没有任何问题。

我该如何做到这一点?

0 个答案:

没有答案