【问题标题】:ASP.NET MVC: Why the Account Model sample use MembershipProvider instead of just MembershipASP.NET MVC:为什么帐户模型示例使用 MembershipProvider 而不仅仅是 Membership
【发布时间】:2010-11-09 15:53:58
【问题描述】:

我有点困惑。在许多教程中,包括 MSDN 和 ASP.NET 网站中的一些教程,几乎总是关于Membership。但是在检查默认创建的 AccountModel 类时,它是关于一个名为 _provider 的对象,类型为 MembershipProvider

首先,我想知道他们为什么不使用 Membership 而不是 MembershipProvider? 其次(也是最烦人的),为什么当我尝试使用 _provider.GetAllUsers() 时,我还被要求提供参数,例如 pageindexpagesize 等。但是,当我使用 Membership.GetAllUsers() 时,我不需要提供任何东西。

使用稍微不同的方法同时拥有 Membership 和 MembershipProvider 有什么意义?

编辑

这些是我用来学习如何使用会员资格的一些文件。我说的是我的书。

ASP.NET tutorial,

4GuysFromRolla,

An other 4GuysFromRolla,

MSDN

感谢您的帮助

【问题讨论】:

  • 可测试性!您没有在教程中阅读过相关内容吗?

标签: asp.net-mvc membership-provider


【解决方案1】:

MembershipProvider 是一个抽象类,这意味着您不能创建它的新实例,而是必须创建自己的继承自它的自定义类,然后实现功能。

将基类作为构造函数意味着您可以传入任何继承自它的类。正如其他人所说,这在您进行测试时会有所帮助。你可以传入一个伪造的实现或MembershipProvider 的模拟来测试你的控制器/类的所有功能。

【讨论】:

  • 感谢您的回答,这有助于我理解为什么不只是使用 Membership,而是使用 Membership.Provider。
  • 但是,为什么他们提出的方法略有不同?例如,为什么我需要为 Membership.Provider 提供参数?而我不用的话就不用了?
  • 你能澄清你的评论吗?
  • 感觉API修改了。但是,这不是一个真正的问题。当您期望一个方法的签名是,而您却得到了它时,这很烦人。但是,它有效。剩下的,我知道 Membershipprovider 是一个抽象类,旨在简化可测试性。
【解决方案2】:

如果您只使用成员资格而不是提供者,则必须为您的测试提供一个带有模拟提供者的配置文件。这样,您只需创建一个虚假的成员资格提供程序,并在创建 MembershipService 实例时使用它。 Membership 只是默认 MembershipProvider 的包装。因此,正如@bzlm 所说,使用提供程序而不是 Membership 静态类更具可测试性。

【讨论】:

    猜你喜欢
    • 2017-01-09
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2021-03-08
    • 2018-02-08
    • 2020-09-05
    相关资源
    最近更新 更多