类库中的Membership.CreateUser()

时间:2012-10-27 12:34:27

标签: .net class asp.net-membership

我正在将代码从App_Code移到类库中。

我使用Membership.CreateUser以编程方式创建用户。

如何在我的类库中继续执行此操作,因为我无法访问web.config中已配置的成员资格提供程序?

4 个答案:

答案 0 :(得分:4)

在我向您展示代码部分的工作原理之前 - 您需要了解在这种情况下如何加载设置。

如果您的Web应用程序要加载.dll文件 - 并且.dll文件将访问应用程序已配置的MembershipProvider - 您必须制作一些假设。

  1. Web应用程序有MembershipProvider
  2. Web应用程序在MembershipProvider
  3. 中为Web.Config提供设置
  4. Web应用程序正确加载.dll
  5. 因为您的.dll文件应该包含在Web应用程序的/bin目录中,所以您应该能够依赖 Web应用程序的配置,而不必提供自己的

    要做到这一点,请从Oded在回答中提到的内容开始 - 在System.Web.Security代码中创建对.dll的引用 - 然后在该文件中,您可以执行以下操作:

    if (Membership.Provider != null) {
        Membership.Provider.CreateUser( ... );
    } else {
        // Do something appropriate in a case where there is no Membership Provider
    }
    

    此时 - 如果上述方法不起作用,可能是因为您的Web应用程序没有配置适当的提供程序。

    关于为什么这样做的说明......

    您应该让Web应用程序提供配置的原因是遵守Separation of Concerns的原则。 MembershipProvider是一个提供默认功能的抽象类 - 几乎没有实现。

    换句话说 - 它定义了要管理成员,您需要能够执行CreateUser()GetAllUsers()等操作。它还说您应该能够配置设置,例如指定PasswordFormat并确定每个用户RequiresUniqueEmail

    它不会告诉您存储用户信息的位置。它将其留给实现者(System.Web.Providers.DefaultMembershipProviderYourNS.YourMembershipProvider)。

    使用MembershipProvider的应用程序然后确定要提供的设置和要使用的实现。换句话说 - YourNS.YourMembershipProvider的工作是指定如何管理信息,但应用程序可能应该确定在其存储中使用ConnectionString等等。

    所以 - 遵循上面概述的模式,您可以提供三个单独的层:

    1. 将使用MembershipProvider
    2. 的应用程序
    3. 提供MembershipProvider实施的程序集,
    4. 使用配置了MembershipProvider的程序集 - 并代表应用程序对其执行某些操作(*这是您在帖子中描述的图层,我相信)
    5. 请注意,如果您遵循此模式 - 您现在可以在以后切换MembershipProviders而无需更改任何其他图层 - 因为这些图层依赖于基类MembershipProvider - 而不是依赖于您的具体实施。这非常有价值。

答案 1 :(得分:1)

我通过将整个web.config复制到我的app.config来解决了我的问题。我正在使用控制台应用程序。我以为我已经复制了必要的部分,但直到我复制了所有内容,数据才进入数据库

答案 2 :(得分:0)

将use指令添加到班级中的System.Web.Security命名空间 - 这样您就可以直接访问Membership类。

C#:

using System.Web.Security;

VB.NET:

Imports System.Web.Security

答案 3 :(得分:0)

您可以在任何地方访问它,因为Membership类是ASP.NET提供程序系统设置的当前提供程序的静态表示。