工厂模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProCommon;
using System.Web.Caching;
using System.Web;
using System.Configuration;
using System.Reflection;

namespace ProFactory
{

/// <summary>
///依赖注入提供者
///使用反射机制实现
/// </summary>
public sealed class DependencyInjector
{
/// <summary>
/// 取得数据访问层对象
/// 首先检查缓存中是否存在,如果不存在,则利用反射机制返回对象
/// </summary>
/// <param name="className">数据访问类名称</param>
/// <returns>数据访问层对象</returns>
public static object GetDALObject(string className)
{
//取得访问层对象,首先检查缓存,不存在则在配置文件中读取
//缓存依赖项为:Web.config;
object dal = CacheClass.GetFromCache("DAL");
if (dal == null)
{
CacheDependency denpency = new CacheDependency(HttpContext.Current.Server.MapPath("Web.Config"));
dal = ConfigurationManager.AppSettings["DAL"];
CacheClass.SaveToCache("DAL", dal, denpency);
}
//取得数据访问层对象
string dalName = dal.ToString();
string fullClassName = dalName + "." + className;
object dalObject = CacheClass.GetFromCache(className);
if (dalObject == null)
{
CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath("Web.config"));
dalObject = Assembly.Load(dalName).CreateInstance(fullClassName);
CacheClass.SaveToCache(className, dalObject, fileDependency);
}
return dalObject;
}
/// <summary>
/// 取得业务逻辑层对象
/// 首先检查缓存中是否存在,如果不存在,则利用反射机制返回对象
/// </summary>
/// <param name="className"></param>
/// <returns></returns>
public static object GetBLLObject(string className)
{
object bll = CacheClass.GetFromCache("BLL");
if (bll == null)
{
CacheDependency dependency = new CacheDependency(HttpContext.Current.Server.MapPath("Web.config"));
bll = ConfigurationManager.AppSettings["BLL"];
CacheClass.SaveToCache("BLL", bll, dependency);
}
string bllName = bll.ToString();
string fullClassName = bllName + "." + className;
object fileBll = CacheClass.GetFromCache(className);
if (fileBll == null)
{
CacheDependency dependency = new CacheDependency(HttpContext.Current.Server.MapPath("Web.config"));
fileBll = Assembly.Load(bllName).CreateInstance(fullClassName);
CacheClass.SaveToCache(className, fileBll, dependency);
}
return fileBll;
}
}
}

原文地址:https://www.cnblogs.com/wzq806341010/p/2846795.html