0
我需要能夠在運行時設置RoleProvider。我甚至不知道它來自哪裏 - 我正在使用一些鬆耦合的依賴注入 - 所以我甚至無法在web.config文件中定義它。如何在運行時設置角色提供者?
如何在運行時設置角色提供程序?
我需要能夠在運行時設置RoleProvider。我甚至不知道它來自哪裏 - 我正在使用一些鬆耦合的依賴注入 - 所以我甚至無法在web.config文件中定義它。如何在運行時設置角色提供者?
如何在運行時設置角色提供程序?
我會創建一個自定義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...
}
你可以看你怎麼可能擴展爲支持多個供應商,並在運行時,你的供應商可以使用選擇。
這是否回答你的問題?
是的,它的確...種類這實際上是我在做的事......但我並不熱衷於這種類型的代理。導出和編寫同一個人的自己會導致麻煩......並且很醜陋。但是,這是我迄今爲止唯一能夠提出的,所以+1。 – 2009-09-18 16:47:16