asp.net 2.0在很多地方都用到Provider Pattern,比如Personalization、MemberShip等都用到了该模式,其可插拔的特性给开发人员极大的便利,开发人员可以更据自己的需求来开发自己的需要
.Net 2.0中给我们已经定义了一个ProviderBase的抽象类,继承自它我们可以方便的开发自定义的Provider
首先我们写一个抽象类,用来定义好我们需要的抽象方法和接口,为了方便调用,我们为这个类定义了一个静态的构造器,用来实例化该抽象类调用的真正的Provider的实现,并通过Instance()返回其实例化后的对象,我们就可以通过BlogDataProvider.Instance()来调来所用到的实例了
public abstract class BlogDataProvider:ProviderBase
![]()
{
private static BlogDataProvider _provider = null;
private static CusProviderCollection<BlogDataProvider> _providers = null;
private static object _lock = new object();
static BlogDataProvider()
![]()
{
CreateDefaultCommonProvider();
}
public static BlogDataProvider Instance()
![]()
{
return _provider;
}
private static void CreateDefaultCommonProvider()
![]()
{
if (_provider ==null)
![]()
{
lock (_lock)
![]()
{
if (_provider == null)
![]()
{
ProvidersConfigSection section = (ProvidersConfigSection)ConfigurationManager.GetSection("system.web/dataService");
//ProviderSettingsCollection Settings = (ProviderSettingsCollection)section["providers"];
_providers = new CusProviderCollection<BlogDataProvider>();
ProvidersHelper.InstantiateProviders(section.Providers, _providers, typeof(BlogDataProvider));
_provider = _providers["SqlBlogDataProvider"];
}
}
}
}
public abstract void AddBlog(DHBlog blog);
public abstract void UpdateBlog(DHBlog blog);
public abstract void DeleteBlog(int id);
}
由于我们用的是ProviderHelper.InstatiateProviders来调用配置文件中定义的类,所以我们还要实现其两个参数定义的类,一个是继承自ConfigurationSection用来读
取配置节点的ProvidersConfigSection

















还有一个就是实现自ProviderCollection的一个Provider的集合类,因为我们要定义多种不同的Provider所以用一个泛型来实现






























然后是我们要求的类的功能的具体实现








































































Provider模式是能过配置文件来定义具体要实例化的类的,我们可以在我们的Web.config加入如下代码
























