我正在将代码从App_Code
移到类库中。
我使用Membership.CreateUser
以编程方式创建用户。
如何在我的类库中继续执行此操作,因为我无法访问web.config
中已配置的成员资格提供程序?
答案 0 :(得分:4)
在我向您展示代码部分的工作原理之前 - 您需要了解在这种情况下如何加载设置。
如果您的Web应用程序要加载.dll
文件 - 并且.dll
文件将访问应用程序已配置的MembershipProvider
- 您必须制作一些假设。
MembershipProvider
MembershipProvider
Web.Config
提供设置
.dll
因为您的.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.DefaultMembershipProvider
或YourNS.YourMembershipProvider
)。
使用MembershipProvider
的应用程序然后确定要提供的设置和要使用的实现。换句话说 - YourNS.YourMembershipProvider
的工作是指定如何管理信息,但应用程序可能应该确定在其存储中使用ConnectionString
等等。
所以 - 遵循上面概述的模式,您可以提供三个单独的层:
MembershipProvider
,MembershipProvider
实施的程序集,MembershipProvider
的程序集 - 并代表应用程序对其执行某些操作(*这是您在帖子中描述的图层,我相信)请注意,如果您遵循此模式 - 您现在可以在以后切换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提供程序系统设置的当前提供程序的静态表示。