反射(二)之 配置扩展应用

前言

前面学习了反射的基本范式,并且做了一些尝试,但遗留了一个问题,反射有什么作用,这里将会用一个例子来说明反射之Assembly的强大与应用所在。

目标

实现一个可配置、可扩展的应用,这也就是Assembly加载dll的意义所在之一。

正文

1、创建一个类库,实现以下代码

//接口类
namespace ReflectionDemo
{
     public interface IDBHelp
    {
         void Query();
    }
}

//一个继承了接口的类文件,模拟Mysql数据库查询上下文
namespace ReflectionDemo
{
    public class MySqlHelp:IDBHelp
    {
        public MySqlHelp()
        {
            Console.WriteLine("Excute。。。");
        }

        public void Query()
        {
            Console.WriteLine("Excute Qurety in {0}",GetType().FullName);
        }
    }
}

2、创建一个工厂类,专门创建数据库连接对象

 public class Factory
    {
        private static string IdbHelpConfig = ConfigurationManager.AppSettings["IDBHelperConfig"];
        private static string DllName = IdbHelpConfig.Split(',')[1];
        private static string TypeName = IdbHelpConfig.Split(',')[0];

        public static IDBHelp CreateHelp()
        {
            //加载dll
            Assembly assembly = Assembly.Load(DllName);    //程序集的名称,不带文件类型,从当前执行目录加载,需要添加引用,或者复制到当前执行目录
            //获取类型名称,参数为完整名称:命名空间+类名称
            Type type = assembly.GetType(TypeName);

            //创建对象
            object objHelp = Activator.CreateInstance(type);
            IDBHelp idbHelp = (IDBHelp)objHelp;

            //返回实例
            return idbHelp;
        
        }
    }

以上代码就是利用反射来创建一个数据库连接实例,创建的具体类型是通过读取配置文件来指定的,所以实现了一种可配置,当需要连接其他数据库时只需要修改配置文件即可。配置文件中指定了动态库的名称和类型名称,格式如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <appSettings>
    <add key="IDBHelperConfig" value="ReflectionDemo.MySqlHelp,ReflectionDemo"/>

  </appSettings>
  <connectionStrings>
    <!--数据库连接字符串-->
    <add name="Customers" connectionString="Data Source=xxx; Database=Customers; User ID=sa; Password=Passw0rd; MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>

3、使用工厂创建的实例调用方法

IDBHelp idbHelp = Factory.CreateHelp();
idbHelp.Query();
结尾

以上就实现了程序的可配置、可扩展,当需要连接其他数据库时只需要提供一个类似的dll,并修改配置文件就可实现相应的功能。类似的dll是要求新增的dll需要继承同样的接口并实现相应的方法。
文中有涉及到一个读取配置文件的操作,这里不做介绍,欲知原有请移步至“配置文件操作“笔记一文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值