自定义ASP.NET成员资格提供程序:我可以将它放在另一个项目中

时间:2012-04-18 23:08:28

标签: asp.net asp.net-membership membership-provider

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

  1. 我有一个MVC 4项目,它引用了一个包含服务层的“服务”项目。
  2. 我在自定义MembershipProvider周围构建了一个包装器,它有助于单元测试。此包装器引用自定义MembershipProvider。
  3. 我从服务层引用包装器。
  4. 我将自定义MembershipProvider放在MVC4项目中(在App_Data文件夹中),因为据我所知这是必需的......至少:Visual Studio发出如果我把它放在其他地方就找不到会员提供者。
  5. 所以现在我有一个循环依赖:MVC4 - >服务层 - >包装 - > MVC4。我的问题:如何摆脱它?理想情况下,我想将会员提供者放在一个单独的项目中,但我只是不能让它工作。对此有何建议?我害怕谷歌并没有真正帮助。

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

    奖金问题2:没有更好的选择吗?整个ASP.NET成员资格感觉非常过时,并且有许多缺点(例如:它不是为了测试而构建的)。

1 个答案:

答案 0 :(得分:2)

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

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

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

奖金问题1:否。

奖金问题2:会员提供商在整个TDD运动之前(就微软而言),所以是的,它们并不真正有利于测试。但是,如果你从基类继承,你就会陷入一个经过良好测试和耗时的框架,所以你真的只需要测试你的自定义位。