0

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

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

4

1 回答 1

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...
}

您可以看到如何扩展它以支持多个提供程序,并在运行时选择您可以使用哪些提供程序。

这是否回答你的问题?

于 2009-09-18T16:07:10.797 回答