我想添加一些在DotNetNuke网站上注册新用户时运行的代码。有一个自定义注册模块,我可以添加代码。我担心的是这个注册模块仍然是一个正在进行的工作,并不是我真正掌握的。有人可能会破坏我添加的代码或做出意想不到的事情。
我是否可以使用添加代码进行用户会员活动?
我正在考虑创建一个源自我们现有提供程序的成员资格提供程序(DNN或ASP.NET提供程序)。我会扩展CreateUser()的实现,以调用原始实现,然后调用我的自定义代码。
好处是它们与注册组件没有耦合。但是,与添加HttpModule不同,其中配置与站点的其他方面无关 - 我将隐藏现有的成员资格提供程序。假设某人想要更新提供程序是出于其他原因 - 他们必须重新编译我的类,而不是只能更改web.config文件。
我打算创建一个派生自MembershipProvider的泛型类,然后使用原始提供程序作为泛型类型参数。我希望这可以将原始提供程序类型包含在web.config定义中。不成功的C#泛型不允许您从泛型类型参数派生。 :(
答案 0 :(得分:3)
如果您从现有的成员资格提供程序派生,为什么在另一个提供程序更改时(假设您没有使用强名称引用),您的类必须重新编译?提供者模型的整体思想是合同不会改变。对基本会员提供者的任何更改都是内部的,因为合同必须保持不变。并且您的提供商必须这样做,因此它也可以被覆盖。如果您的提供商只是:
class NewMembershipProvider : ExistingMembershipProvider
override CreateUser()
{
//do custom stuff
base.CreateUser();
}
您已经干净地抽象了实施细节。一个人可以改变而不影响另一个。任何未来的变化都可以通过覆盖您的提供商来实现。
答案 1 :(得分:1)
我强烈认为你可能会在这里增加一些复杂性。事情总是以任何形式破裂,很难实现“无耦合”。尝试编写一些好的单元测试用例,这样你就可以知道它们何时被破坏而不是创建一个完全不同的处理程序来创建新用户。