2009-09-18 80 views
0

我需要能夠在運行時設置RoleProvider。我甚至不知道它來自哪裏 - 我正在使用一些鬆耦合的依賴注入 - 所以我甚至無法在web.config文件中定義它。如何在運行時設置角色提供者?

如何在運行時設置角色提供程序?

回答

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

你可以看你怎麼可能擴展爲支持多個供應商,並在運行時,你的供應商可以使用選擇。

這是否回答你的問題?

+1

是的,它的確...種類這實際上是我在做的事......但我並不熱衷於這種類型的代理。導出和編寫同一個人的自己會導致麻煩......並且很醜陋。但是,這是我迄今爲止唯一能夠提出的,所以+1。 – 2009-09-18 16:47:16