通过反射工厂实现多数据库间切换
本人电话:15004604582 QQ:771775671 若有不懂的地方欢迎询问
//面向接口编程:在实例化接口的时候通过工厂的方式实例化(工厂需是单独项目)
1.IDAL.IUserInfo user = AbstractFactory.AbstractFactory.GetNewUserInfo();
//该类是工厂的类,每个数据层类(表)对应一个GetNew*方法
namespace Company.Project.AbstractFactory
{
public static class AbstractFactory
{ //获取要实例的数据层程序集名称
private static readonly string dalAssemblyPath=ConfigurationManager.AppSettings["DalAssemblyPath"];
//获取要实例的类公共命名空间名称
private static readonly string dalNameSpace=ConfigurationManager.AppSettings["DalNameSpace"];
//实例userinfo表
public static IDAL.IUserInfo GetNewUserInfo()
{
string dalTotalNameSpace = dalNameSpace + ".UserInfo";
return GetInstance(dalAssemblyPath, dalTotalNameSpace) as IDAL.IUserInfo;
}
private static object GetInstance(string assemblyName,string totalNameSpace)
{
//加载程序集
if (DalCache.GetCache(totalNameSpace) == null)
{
Assembly ably = Assembly.Load(assemblyName);
DalCache.SetCache(totalNameSpace, ably.CreateInstance(totalNameSpace));
}
return DalCache.GetCache(totalNameSpace);
}
}
}
//缓存类:使用缓存保存新实例,增加程序的可执行性
public static class DalCache
{
//获取cache
public static object GetCache(string key)
{
System.Web.Caching.Cache dataCache =System.Web.HttpRuntime.Cache;
return dataCache["key"];
}
//设置cache
public static void SetCache(string key,object value)
{
System.Web.Caching.Cache dataCache = System.Web.HttpRuntime.Cache;
dataCache.Insert(key, value);
}
}
//xml中的数据:如果要切换数据库更改这里对应的程序集和对应的命名空间即可
<!--抽象工厂中要实例化的数据层程序集-->
<add key="DalAssemblyPath" value="Company.Project.SQLDAL"/>
<!--抽象工厂中要实例化的类的命名空间-->
<add key="DalNameSpace" value="Company.Project.SQLDAL"/>
浙公网安备 33010602011771号