代码之家  ›  专栏  ›  技术社区  ›  Frank Schwieterman

ASP.NET或DotNetNuke成员身份的用户创建事件

  •  1
  • Frank Schwieterman  · 技术社区  · 15 年前

    我想添加一些在DotnetNuke站点上注册新用户时运行的代码。有一个定制的注册模块,我可以在其中添加代码。我担心的是,这个注册模块仍然是一个正在进行中的工作,这不是我真正控制的。有人可能会破坏我添加的代码,或者做一些意想不到的事情。

    是否还有另一个好的选择,我可以使用添加代码到用户成员资格事件?

    我考虑创建一个从我们现有的提供程序派生的成员资格提供程序(dnn或asp.net提供程序)。我将扩展createuser()的实现,以调用原始实现,然后调用自定义代码。

    好处是它们与注册组件没有耦合。但是,缺点是我将隐藏现有的成员资格提供程序,这与添加一个配置独立于站点其他方面的httpmodule不同。假设有人出于另一个原因想要更新提供者——他们必须重新编译我的类,而不是简单地更改web.config文件。

    我准备创建一个从MembershipProvider派生的泛型类,然后使用原始提供程序作为泛型类型参数。我希望在web.config定义中包含原始提供者类型。不可否认的C泛型不允许从泛型类型参数派生。:。(

    2 回复  |  直到 15 年前
        1
  •  3
  •   Rex M    15 年前

    如果您从现有的成员资格提供程序派生,那么当另一个提供程序更改时(假设您不使用强名称引用),为什么必须重新编译您的类?提供者模型的整体思想是契约不变。对基础成员资格提供程序的任何更改都是内部的,因为合同必须保持完整。而且您的提供者也必须这样做,所以它也可以被覆盖。如果您的供应商只是这样做:

    class NewMembershipProvider : ExistingMembershipProvider
    
    override CreateUser()
    {
        //do custom stuff
        base.CreateUser();
    }
    

    您已经清晰地抽象了实现细节。一个可以改变而不影响另一个。将来的任何更改都可以通过覆盖您的提供程序来完成。

        2
  •  1
  •   Srikar Doddi    15 年前

    我强烈地感觉到你可能在这里增加了一些复杂性。事物总是可以以任何形式破裂,很难实现“无耦合”。尝试编写一些好的单元测试用例,这样您就可以知道它们何时被破坏,而不是仅仅为创建新用户而创建一个完全不同的处理程序。