public static IDataProvider GetInstance()

来源:百度知道 编辑:UC知道 时间:2024/06/21 22:55:15
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using Music.Config;

namespace Music.DbHelper
{
public class DataBaseProvider
{
private DataBaseProvider()
{ }

private static IDataProvider _instance = null;
private static object lockHelper = new object();

static DataBaseProvider()
{
GetProvider();
}

private static void GetProvider()
{
try
{
_instance = (IDataProvider)Activator.CreateInstance(Type.GetType(string.Format("Music.Data.{0}.DataProvider,Music.Data.{0}", Configs.GetDbType), false, true));
}
catch (Exception aa)
{
throw new Exception(aa + "请检查Web.config中DbType节点数据库类型是否正确,

这里用的是一个单件模式,
GetProvider()这个方法,用来生成一个IDataProvider接口的实例化对象,中间应用了反射方法,下面这行:
instance = (IDataProvider)Activator.CreateInstance(Type.GetType(string.Format("Music.Data.{0}.DataProvider,Music.Data.{0}", Configs.GetDbType), false, true));
调用反射创建满足接口IDataProvider的类,赋给instance。类似于平常编写的IdataProvider instance=new Music.Data.Access.DataProvider();这种方式。但应用反射的方式,这样使代码更容易配置,更加灵活。如这里,可以创建多种数据库的访问方式,实现IDataProvider,然后在配置文件中写入当前应用的数据库类名信息,就可以通过反射创建具体的类。上面那句的Configs.GetDbType用来获取当前配置文件中的当前数据库信息,返回的是你填写的信息,如SqlServer、Access、MySql,具体代码我看不到,但原理是这样的。
你填写的信息应该满足:
Music.Data.命名空间.DataProvider
也就是比如你有一个Access数据访问方式
你应该新建一个类库:格式为
namespace Music.Data.命名空间
{
class DataProvider:IDataProvider
{
//这个类必须实现IDataProvider接口
}
}
注意:命名空间你替换成你的,比如Access,SqlServer等
这个类库生成的dll你应该命名成 Music.Data.命名空间.dll 命名空间就是你配置文件的标识,你配置文件中填写你上面定的命名空间就行了。

又如,你还有一个SqlServer方式访问的数据库:

那么新建类库
namespace Music.Data.