C# 是否可以为整个控制器设置自定义ModelBinder?

C# 是否可以为整个控制器设置自定义ModelBinder?,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我有一个自定义模型活页夹,我知道将其分配给动作方法的两种方法: 在方法上: public ActionResult MyAction([ModelBinder(typeof(MyCustomModelBinder))] ModelClass filter 或在global.asax.cs中进行全局搜索: ModelBinders.Binders.Add(typeof(MyCustomModelBinder)) 但是我想知道是否有办法在控制器上分配自定义模型绑定器?因此,它适用于控制器中的所有

我有一个自定义模型活页夹,我知道将其分配给动作方法的两种方法:

在方法上:

public ActionResult MyAction([ModelBinder(typeof(MyCustomModelBinder))] ModelClass filter
或在global.asax.cs中进行全局搜索:

ModelBinders.Binders.Add(typeof(MyCustomModelBinder))

但是我想知道是否有办法在控制器上分配自定义模型绑定器?因此,它适用于控制器中的所有方法,但不适用于全局?

不,据我所知,它在逻辑上没有多大意义,因为ModelBinder在Binders集合中全局绑定到模型(或通过直接在Model类上添加属性)或在动作中本地绑定到模型

但是,您仍然可以通过使用类似的工具创建方面(如从面向方面的编程中)来实现您想要的。您将能够在控制器级别应用该方面,并且它将作为编译后步骤在所有方法上注入ModelBinder属性。问题是你们是否想经历所有这些麻烦,更重要的是它是否会带来任何价值


属性装饰器方面的示例。

在模型活页夹中,您可以访问ControllerContext。因此,根据可用的控制器信息绑定模型应该很容易

它确实有点味道,因为您正在创建模型绑定和控制器之间的耦合。但是,如果您使用DI创建一个策略模式,并将绑定器解析器注入ModelBinderContainer,ModelBinderContainer然后使用其系统知识来选择所需的绑定,那么您将获得解决方案