我需要能够在运行时设置RoleProvider。我甚至不知道它来自哪里 - 我正在使用一些松散耦合的依赖注入 - 所以我甚至无法在web.config文件中定义它。
如何在运行时设置角色提供程序?
答案 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...
}
您可以看到如何扩展此功能以支持多个提供商,并在运行时选择您可以使用的提供商。
这会回答你的问题吗?