如何在运行时设置角色提供程序?

时间:2009-09-18 15:25:39

标签: asp.net roleprovider

我需要能够在运行时设置RoleProvider。我甚至不知道它来自哪里 - 我正在使用一些松散耦合的依赖注入 - 所以我甚至无法在web.config文件中定义它。

如何在运行时设置角色提供程序?

1 个答案:

答案 0 :(得分:3)

我会创建一个自定义RoleProvider。此角色提供程序是唯一需要在web.config中注册的提供程序。

在Initialize方法中,您可以在代码中加载您想要的任何提供程序,并将其存储为自定义提供程序的私有成员。

从那时起,您的角色提供程序只是您所选提供商的代理。 例如:

public class CustomRoleProvider : RoleProvider
{
    //The real role provider;
    private RoleProvider _provider;

    public CustomRoleProvider()
    { }

    public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
    {
        base.Initialize(name, config);
        //In here initalise your Role Provider at run time
        //This is just demo code... obviously you would do something a little more
        //intelligent
        SqlRoleProvider provider = new SqlRoleProvider();
        provider.Initialize("sql", config);
        _provider = provider;
    }

    public override void AddUsersToRoles(string[] usernames, string[] roleNames)
    {
        _provider.AddUsersToRoles(usernames, roleNames);
    }
    public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
    {
        return _provider.DeleteRole(roleName, thrownOnPopulatedRole);
    }
    //other proxy methods would also be here...
}

您可以看到如何扩展此功能以支持多个提供商,并在运行时选择您可以使用的提供商。

这会回答你的问题吗?

相关问题