IssueTrackerCSVS 代码笔记-数据层的反射工厂模式

IssueTracker项目中,用户可以选择使用Access数据库或者是SQL Server。通过Web.config文件中的
  <add key="DataAccessType" 
       value="ASPNET.StarterKit.IssueTracker.DataAccessLayer.SQLDataAccessLayer" />  进行配置。

如何实现这个功能,在此项目中使用了反射工厂模式。

反射通俗的说,就是在编译的时候,不知道将要生成的对象是什么。在运行时才根据配置内容,生成相应的对象。
在项目中实现方式如下:
首先定义了抽象类DataAccessLayerBaseClass Code/DAL/DataAccessLayer.cs中。在该类中定义对数据操作的所有抽象方法。AccessDataAccessLayer.csSQLDataAccessLayer.cs继承DataAccessLayerBaseClass,实现对AccessSql数据库的数据操作。

Code/DAL/DataAccessLayer.cs
<?xml:namespace prefix = o />

 1 None.gif public    class  DataAccessLayerBaseClassHelper 
 2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 3InBlock.gif        public static DataAccessLayerBaseClass GetDataAccessLayer() 
 4ExpandedSubBlockStart.gifContractedSubBlock.gif           dot.gif{
 5InBlock.gif            Type trp = 
 6InBlock.gif                Type.GetType(Globals.DataAccessType, true);
 7InBlock.gif            // Throw an error if wrong base type
 8InBlock.gif            if (trp.BaseType != 
 9InBlock.gif                Type.GetType("ASPNET.StarterKit.IssueTracker.DataAccessLayer.DataAccessLayerBaseClass"))
10InBlock.gif                throw new Exception( "Data Access Layer does not inherit DataAccessLayerBaseClass!");
11InBlock.gif            DataAccessLayerBaseClass dc=  (DataAccessLayerBaseClass)Activator.CreateInstance (trp);
12InBlock.gif            return (dc);
13ExpandedSubBlockEnd.gif        }

14ExpandedBlockEnd.gif}

15 None.gif
 

Type trp = Type.GetType(Globals.DataAccessType, true); 这就实现了反射工厂的功能。在Globals.DataAccessType配置了是使用AccessDataAccessLayer还是SQLDataAccessLayer

从而使得方法返回正确的数据操作对象。

转载于:https://www.cnblogs.com/timothyzhong/archive/2005/11/12/275018.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值