在模型绑定microsoft web api期间注入依赖关系

时间:2016-03-31 14:33:10

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

在我的MVC项目中,我有一个自定义默认模型绑定器,它使用依赖解析器在模型绑定器创建时将服务注入模型。因此,我可以在模型中使用成员资格服务或可查询会话来进行验证,使其远离控制器。

    protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
    {
        if (modelType.IsGenericType)
            return base.CreateModel(controllerContext, bindingContext, modelType);

        return _dependencyResolver.GetService(modelType);
    }`

我想知道是否有办法在Microsoft Web API中执行此操作? IModelBinder没有提供CreateModel方法来覆盖,并且在搜索之后,我看不到任何方法来执行此操作。

1 个答案:

答案 0 :(得分:0)

Bonno,只要您使用特定的模型类型,WebAPI就会自动解析或尝试在控制器中解析模型。查看Parameter Binding in ASP.NET Web API.

  

默认情况下,Web API使用以下规则绑定参数:

     

如果参数是“简单”类型,Web API会尝试获取该值   来自URI。简单类型包括.NET基元类型(int,   bool,double等等,加上TimeSpan,DateTime,Guid,decimal,   和字符串,以及具有可转换的类型转换器的任何类型   一个字符串。 (稍后将详细介绍类型转换器。)对于复杂类型,Web   API尝试使用媒体类型从邮件正文中读取值   格式化。

例如:

    1.Store 123 has cloth style B.
    2.Store 253 has cloth style D.
    3.Store 27 has cloth style A.
    4.Store 164 has cloth style F.
    ......

如果发布的json对象可以解析为SomeModelType,则以modelObject的形式创建SomeModelType的实例。

重点是你不需要自己的依赖解析器。但是,如果您仍然想要出于某种原因,JToken参数类型将包含任何和所有对象。您有责任以与MVC类似的方式反序列化和处理对象。

修改

阅读完评论后,我意识到你在谈论依赖注入。由于WebAPI在解析参数方面的工作方式,我不建议将依赖项注入到控制器函数中,而是让控制器实例化一个通过构造函数或其他方式注入依赖项的类,并将其保留到依赖容器/注入器中。做那个工作。