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

时间:2011-08-12 06:44:48

标签: c# asp.net-mvc-3

我有一个自定义模型绑定器,我知道有两种方法可以将其分配给我的操作方法:

在方法中:

public ActionResult MyAction([ModelBinder(typeof(MyCustomModelBinder))] ModelClass filter

或global.asax.cs中的全局:

ModelBinders.Binders.Add(typeof(MyCustomModelBinder))

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

2 个答案:

答案 0 :(得分:1)

在模型绑定器中,您可以访问ControllerContext。因此,根据您在那里提供的控制器信息来绑定模型应该很容易。

它确实闻到了一点,因为您正在模型绑定和控制器之间创建耦合。但是如果你使用DI创建一个策略模式并将一个活页夹解析器注入一个ModelBinderContainer,然后使用它的系统知识来选择你想要的解决方案。

答案 1 :(得分:0)

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

但是,您仍然可以通过使用PostSharp等工具创建Aspect(如面向方面编程)来实现您的目标。您将能够在Controller级别应用该方面,它将在所有方法上注入ModelBinder属性作为后编译步骤。问题是你是否想要解决所有这些麻烦,更重要的是它会带来任何价值。

属性装饰器方面is available in the PostSharp documentation here的一个示例。