我有一个自定义模型绑定器,我知道有两种方法可以将其分配给我的操作方法:
在方法中:
public ActionResult MyAction([ModelBinder(typeof(MyCustomModelBinder))] ModelClass filter
或global.asax.cs中的全局:
ModelBinders.Binders.Add(typeof(MyCustomModelBinder))
但我想知道是否有办法在控制器上分配自定义模型绑定器?所以它适用于控制器中的所有方法,但不适用于全局?
答案 0 :(得分:1)
在模型绑定器中,您可以访问ControllerContext。因此,根据您在那里提供的控制器信息来绑定模型应该很容易。
它确实闻到了一点,因为您正在模型绑定和控制器之间创建耦合。但是如果你使用DI创建一个策略模式并将一个活页夹解析器注入一个ModelBinderContainer,然后使用它的系统知识来选择你想要的解决方案。
答案 1 :(得分:0)
不,据我所知,它在逻辑上没有多大意义,因为ModelBinder在Binders集合中全局绑定到Model(或者直接在模型类上添加属性)或在模型上本地绑定一个动作。
但是,您仍然可以通过使用PostSharp等工具创建Aspect(如面向方面编程)来实现您的目标。您将能够在Controller级别应用该方面,它将在所有方法上注入ModelBinder属性作为后编译步骤。问题是你是否想要解决所有这些麻烦,更重要的是它会带来任何价值。
属性装饰器方面is available in the PostSharp documentation here的一个示例。