工厂模式+配置文件+反射 实现数据库访问程序

本文介绍了抽象工厂模式的应用及反射技术实现动态实例化的方法。通过一个具体的例子展示了如何根据不同数据库配置选择对应的数据库操作实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本介绍:

 

反射:去某个地方找应该实例化的类:

 

Assembly.Load("程序集名称").CreateInstance("命名空间.类名称")

 

return (IUser)Assembly.Load("抽象工厂模式").CreateInstance("命抽象工厂模式.Sqlserver")

or:

return (IUser)Assembly.Load("抽象工厂模式").CreateInstance("命抽象工厂模式.Oracle")

 

代码演示:

控制台代码:

代码

  1 using System;
  2
 using System.Collections.Generic;
  3
 using System.Text;
  4
 using System.Reflection;             //反射命名空间
  5 using System.Configuration;
  6
 
  7 namespace AbstractorFactory
  8
 {
  9
     class Program
 10
     {
 11
         static void Main(string[] args)
 12
         {
 13
             User user = new User();
 14
             IUser iu = DataAccess.CreateUser();
 15
             iu.Insert(user);
 16
             iu.GetUser(1);
 17
             //IFactory factory = new AccessFactory();
 18
             //IUser iu = factory.CreateUser();
 19
             //iu.Insert(user);
 20
             //iu.GetUser(1);
 21             Console.ReadLine();
 22
         }
 23
     }
 24
     interface IUser
 25
     {
 26
         void Insert(User user);
 27
         User GetUser(int id);
 28
     }
 29
     class User
 30
     {
 31
         private int _id;
 32
 
 33         public int Id
 34
         {
 35
             get { return _id; }
 36
             set { _id = value; }
 37
         }
 38
         private string _name;
 39
 
 40         public string Name
 41
         {
 42
             get { return _name; }
 43
             set { _name = value; }
 44
         }
 45
     }
 46
     class SqlserverUser:IUser
 47
     {
 48
         public void Insert(User user)
 49
         {
 50
             Console.WriteLine("在Sql server中给User表增加一条记录");
 51
         }
 52
         public User GetUser(int id)
 53
         {
 54
             Console.WriteLine("在Sql server中根据id得到User表中的一条记录");
 55
             return null;
 56
         }
 57
     }
 58
     class AccessUser : IUser
 59
     {
 60
         public void Insert(User user)
 61
         {
 62
             Console.WriteLine("在Access中给User表增加一条记录");
 63
         }
 64
         public User GetUser(int id)
 65
         {
 66
             Console.WriteLine("在Access中根据id得到User表中的一条记录");
 67
             return null;
 68
         }
 69
     }
 70
     #region 抽象工厂模式
 71     //interface IFactory
 72
     //{
 73
     //    IUser CreateUser();
 74
     //}
 75
     //class SqlServerFactory : IFactory
 76
     //{
 77
     //    public IUser CreateUser()
 78
     //    {
 79
     //        return new SqlserverUser();
 80
     //    }
 81
     //}
 82
     //class AccessFactory : IFactory
 83
     //{
 84
     //    public IUser CreateUser()
 85
     //    {
 86
     //        return new AccessUser();
 87
     //    }
 88
     //}
 89     #endregion
 90     class DataAccess
 91
     {
 92
         private static readonly string db = ConfigurationSettings.AppSettings["db"];   
 93
         private static readonly string assemblyName = "AbstractorFactory"
 94
 
 95         public static IUser CreateUser()
 96
         {
 97
             //抽象工厂模式
 98
             //IUse result=null;
 99
             //switch (db)
100
             //{
101
             //    case "Sqlserver":
102
             //        result = new SqlserverUser();
103
             //        break;
104
             //    case "AccessUser":
105
             //        result = new AccessUser();
106
             //        break;
107
             //}
108             string className = assemblyName + "." + db + "User";
109
             IUser result =(IUser)Assembly.Load(assemblyName).CreateInstance(className);   //利用反射技术实例化user.
110             return result;
111
         }
112
     }
113
 }
应用程序配置文件 app.config :
1 <?xml version="1.0" encoding="utf-8" ?> 
2
 <configuration>
3   <appSettings>
4     <add key="db" value="Sqlserver"/>
5   </appSettings>
6 </configuration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值