如何在运行时改变User Profile的Provider

本文介绍在ASP.NET 2.0中如何实现在运行时动态更改ProfileProvider,以支持根据不同用户选择不同的Profile数据库。文章通过具体配置示例展示了如何设置多种ProfileProvider,并提供了代码片段说明如何为特定的Profile属性指定使用特定的Provider。

在asp.net 2.0中有专门的Profile Provider用于为User Profile提供下层的存储服务。(如果你对User Profile不熟悉,请看http://www.cnblogs.com/tonyqus/archive/2005/12/18/userprofilev2.html

当然,asp.net也允许我们定制自定义的User Profile Provider,这为多服务器或多种存储介质提供了方便。比如我们可以把Profile存储在Oracle的服务器上,通过实现System.Web.Profile.ProfileProvider抽象类自定义一个OracleProfileProvider就可以满足这样的需求。但通常我们都是在web.config中设置defaultProvider来切换Provider的,这意味着我们无法在运行时修改Provider。如果要用SqlProfileProvider就必须一直使用它。但这无法满足一些特殊的项目需求,比如根据用户的不同,使用不同的Profile数据库。

于是我在网上找了很多资料,但都没有有关如何在运行时修改Profile Provider的方法,只看到如何在运行时修改Membership Provider以及如何自定义Profile Provider的文章。为了实现这一点,特地用Reflector分析了默认的存储方法。得出的结论如下:

假设我们在web.config中有这样的profile设置:

None.gif < profile  defaultProvider ="AspNetSqlProfileProvider" >
None.gif      
< providers >
None.gif           
< clear />
None.gif           
< add  name ="AspNetSqlProfileProvider"  connectionStringName ="strConnUserDB"  type ="System.Web.Profile.SqlProfileProvider"  description ="存储Profile数据" />
None.gif           
< add  name ="TextFileProfileProvider"  type ="CustomProviders.TextFileProfileProvider, CustomProviders"  description ="Text file profile provider" />
None.gif      
</ providers >
None.gif      
< properties >
None.gif           
< add  name ="test" />
None.gif      
</ properties >
None.gif
</ profile >

如果我们要让Profile["test"]使用TextFileProfileProvider来保存数据的话,我们可以用下面的语句:

None.gif ProfileCommon.Properties[ " test " ].Provider  =  Profile.Providers[ " TextFileProfileProvider " ];
None.gifProfile[
" test " =   " bbb " ;

下面我们来分析一下原理。

我们通常使用的Profile其实是一个ProfileCommon的一个实例,Profile.Providers属性提供了在web.config的providers节中设置的自定义Provider,我们可以用Profile.Providers["ProviderName"]这样的代码来获得一个自定义Provider,注意这里的ProviderName是providers节中的每一个provider的name属性。由于Properties属性是静态属性,无法通过ProfileCommon的实例来调用,所以只能用类调用。

在ProfileCommon类内部有一个SettingsPropertyCollection用于存储所有的Profile属性,而其中每个SettingsProperty就代表一个Profile属性,对于每个SettingsProperty有三个必要元素:name, value和provider,这也是为什么我们可以对某个Profile属性设置provider。

转载于:https://www.cnblogs.com/tonyqus/archive/2006/12/26/603325.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值