1

我正在构建一个自定义 ASP.NET 成员资格提供程序,因为我想使用我自己的“用户”表来创建成员和类似的东西。情况如下:

  1. 我有一个 MVC 4 项目,它引用了一个包含服务层的“服务”项目。
  2. 我围绕自定义 MembershipProvider 构建了一个包装器,它有助于单元测试。此包装器引用自定义 MembershipProvider。
  3. 我从我的服务层引用包装器。
  4. 我将自定义 MembershipProvider 放在 MVC4 项目中(在 App_Data 文件夹中),因为据我所知这是必需的……至少:Visual Studio 抱怨说,如果我把它放在其他地方,它就找不到成员资格提供程序。

所以现在我有了一个循环依赖:MVC4 -> 服务层 -> Wrapper -> MVC4。我的问题:我该如何摆脱它?理想情况下,我想将会员提供者放在一个单独的项目中,但我就是无法让它发挥作用。对此有什么建议吗?恐怕谷歌并没有真正的帮助。

奖励问题 1:我应该扩展 SqlMembershipProvider 而不是 MembershipProvider?

奖励问题 2:没有更好的选择吗?整个 ASP.NET 成员感觉真的过时了,并且有许多缺点恕我直言(例如:它不是为可测试而构建的)。

4

1 回答 1

2

您绝对可以将您的自定义会员提供程序放在另一个项目中。我有两个作为单独的 DLL 构建,然后在 Web 项目中添加了一个引用。

您没有提及为什么在服务层中添加引用,但如果有必要,您应该将它们视为两个不同的范围,因此需要两个单独的解决方案。我有一个成员提供程序需要调用 WCF 服务来验证成员身份,但这是两个独立的部分,您不应该在两者之间共享代码。

您无需将代码放在 App_Data 文件夹中,只需在网站项目中添加对 Membership Provider 项目或 DLL 的引用即可。对

奖金问题1:不。

额外问题 2:会员提供者早于整个 TDD 运动(就微软而言),所以是的,它们不利于测试。但是,如果您从基类继承,您将连接到一个经过良好测试且过时的框架,因此您实际上只需要测试您的自定义位。

于 2012-04-19T00:17:30.640 回答