接口和包装器,自定义模型绑定器或ActionFilter,用于为控制器提供公共类?

时间:2011-06-23 12:56:35

标签: c# asp.net-mvc model-view-controller

我需要提供我的控制器操作方法访问包含自定义应用程序用户信息的公共类实例(让我们称之为UserSessionInfo)。

目前它由基本控制器直接从http会话中提取,但我试图删除HTTPContext依赖对象的所有依赖项,以使控制器更清洁,更可测试。

我的理解是有三种可能的解决方案,

  1. 将其注入控制器构造函数
  2. ActionFilter为每个操作方法提供UserSessionInfo。
  3. IModelBinder实现,为每个操作方法提供UserSessionInfo。
  4. 我对1的理解很好。努力克服2和3之间的差异。

    任何帮助表示感谢。

    谢谢,

    马特

1 个答案:

答案 0 :(得分:3)

ActionFilters和ModelBinders之间的最大区别在于他们无法做到的,他们的耦合和开发人员的期望。

在actionfilter之前执行一个modelBinder 它专门用于将请求数据绑定到模型。 它不知道它正在执行什么动作。 它与绑定过程相结合

操作过滤器知道操作及其参数 actionfilter在modelbinder之后执行,可以改变 modelbinder返回的数据。它与执行动作

相关联

开发人员的期望可能是最大的不同。 ModelBinder应该是相对轻量级的解析,仅提取和填充对象。

在某些条件下,行动过滤器应做“做事”,做出决定,影响处理流程。

希望这些宽松的指导方针很有用!