如何构建和实现自定义成员资格提供程序?

时间:2011-05-22 21:02:24

标签: asp.net asp.net-mvc-3 asp.net-membership projects-and-solutions membership-provider

我正在尝试学习ASP.NET MVC。在阅读了网上的许多文章之后,我整理了一个粗略的示例应用程序,该应用程序使用自定义成员资格提供程序对现有SQL数据库进行身份验

我的模型类库项目的结构如下所示。

  • Sigma.Models
    • 实现
      • FormsAuthenticationService.cs
      • MembershipService.cs
    • 接口
      • IFormsAuthenticationService.cs
      • IMembershipRepository.cs
      • IMembershipService.cs
    • 提供商
      • SigmaMembersipProvider.cs
    • 存储库
      • SqlMembershipRepository.cs
    • MembershipModel.cs

我的问题如下:

  • 我是否应该创建另一个像Sigma.DataAccess这样的类库项目来单独保存提供程序和存储库?这是一种可接受的方式来进行MVC解决方案架构吗?这只是我正在研究的概念证明,实际项目可能变得非常庞大。我想确保我不会做任何愚蠢的事情。

  • IMembershipRepository和IMembershipService主要包含相同的功能,但IMembershipRepository使用自定义开发的MembershipModel对象返回数据;而IMembershipService是标准ASP.NET MembershipProvider的接口,并返回MembershipUser和MembershipCollection。我应该从IMembershipService继承IMembershipRepository接口吗?

  • 我想让模型项目可重用,所以我可以将它用于任何其他UI应用程序,如WebForms或WinForms。这可能与项目的结构方式有关吗?

  • 此外,我不想使用ASP.NET开箱即用的成员资格提供程序,因为我需要一个可以对现有数据库起作用的解决方案。我认为这意味着我必须自定义ASP.NET成员资格提供程序中可用的功能以对我的自定义数据库起作用。如果我的假设不正确,请纠正我。

提前致谢。

1 个答案:

答案 0 :(得分:3)

  

我是否应该创建另一个像Sigma.DataAccess这样的类库项目来单独保存提供程序和存储库?这是一种可接受的方式来进行MVC解决方案架构吗?这只是我正在研究的概念证明,实际项目可能变得非常庞大。我想确保我不会做任何愚蠢的事情。

是 - 将它们分开,以防您的实施发生变化,影响较小。

  

IMembershipRepository和IMembershipService主要包含相同的功能,但IMembershipRepository使用自定义开发的MembershipModel对象返回数据;而IMembershipService是标准ASP.NET MembershipProvider的接口,并返回MembershipUser和MembershipCollection。我应该从IMembershipService继承IMembershipRepository接口吗?

实际上在提供的示例中 - 实际上似乎没有区别 - 两种方法都是bool ValidateUser(),这绝对是一个重复,但因为它们各自都有一个可能“潜在”改变的最终用途,它们被抽象为两个独立的接口,所以我不会从另一个继承。

  

我希望模型项目可重用,这样我就可以将它用于任何其他UI应用程序,如WebForms或WinForms。这可能与项目的结构方式有关吗?

是的 - 但我会突破并仅保留 该项目中的模型。任何不是模型的东西都不应该在那个项目中。

  

此外,我不想使用ASP.NET开箱即用的成员资格提供程序,因为我需要一个可以对现有数据库起作用的解决方案。我认为这意味着我必须自定义ASP.NET成员资格提供程序中可用的功能以对我的自定义数据库起作用。如果我的假设不正确,请纠正我。

这是正确的 - 您需要一个自定义SQL成员资格提供程序