Provider的管理程序,反射就用他,保证好处多多。
配置文件还带智能提示功能哦,跟web.config一样。很爽。。。。
首先配置下web.config告诉系统配置文件在哪里。
<appSettings>
<add key="ProviderSettingsPath" value="~/Config/ProviderSettings.config" />
<!--<add key="UserInfoProviderName" value="UserInfoProvider" />-->
</appSettings>
然后做个xml的架构文件 ProviderSchema.xsd 就和上面设置的 ProviderSetting.config 放一起好了。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ProviderSchema" elementFormDefault="qualified" xmlns="http://www.w3school.com.cn" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:NS="http://www.w3school.com.cn" targetNamespace="http://www.w3school.com.cn">
<xs:element name="ProviderCinfig">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element name="Providers">
<xs:complexType>
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="Provider">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element name="Attributes">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="add">
<xs:complexType>
<xs:sequence />
<xs:attribute name="key" type="xs:string" />
<xs:attribute name="value" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="AttributesKey1">
<xs:selector xpath=".//NS:add" />
<xs:field xpath="@key" />
</xs:key>
</xs:element>
</xs:sequence>
<xs:attribute name="providerName" type="xs:string" />
<xs:attribute name="classType" type="xs:string" use="required" />
<xs:attribute name="assemblyType" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:key name="ProvidersKey1">
<xs:selector xpath=".//NS:Provider" />
<xs:field xpath="@providerName" />
</xs:key>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
在做个 ProviderSetting.config 文件,用来存放要反射文件的配置。参数很明显,一看就知道。
顺便解释下每个provider可以带很多个参数哦。而且设置下面的provider都是智能提示的,原来写配置文件可以这么简单。
<?xml version="1.0" encoding="utf-8"?>
<ProviderCinfig xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn ProviderSchema.xsd">
<Providers>
<Provider providerName="AuthorCacheProvider" assemblyType="CE.SqlString.SqlStringTest.Provider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0aadabd12e7a8989" classType="CE.SqlString.SqlStringTest.Provider.AuthorProvider">
<Attributes>
<add key="getString" value="ttcre2"/>
</Attributes>
</Provider>
<Provider providerName="AuthorDalProvider" classType="CE.SqlString.SqlStringTest.Dal.AuthorDal" assemblyType="CE.SqlString.SqlStringTest.Dal, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0aadabd12e7a8989" />
<Provider providerName="UserInfoProvider" classType="CE.Components.Base.Security.UserInfo" assemblyType="CE.Components.Base, Version=1.0.0.0, Culture=neutral, PublicKeyToken=209c90b915362a04" />
</Providers>
</ProviderCinfig>
然后做个资源文件,存放架构信息。用来对配置文件(ProviderSettings.config)做验证。
就是把ProviderSchema.xsd的内容记到一个字符串下面待用。我是放到配置文件中去了。
好了,关键的ProviderFactory.cs文件,代码如下。
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Configuration.Provider;
using System.Web.Configuration;
using System.Web.Caching;
using System.Web;
using System.IO;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;

using CE.Components.Base.Properties;

namespace CE.Components.Base
使用就非常简单了。做个基类UserInfoBase,继承System.Configuration.Provider.ProviderBase
然后要类UserInfo继承UserInfoBase。
调用方法:
ProviderFactory.LoadProvider("配置文件中的那个名字") as UserInfoBase
调用参数的方法:
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
}
有个例子,可以参考http://www.cnblogs.com/ttcre2/archive/2008/07/28/1251481.html