反射2

1.我的随笔

  简单工厂模式、反射  都有写到一些反射

2.设计一个可配置是sql Helper

  这里只说明一下反射的大体框架

  

  写一个接口,定义插入和更新操作

namespace ConsoleApp1
{
    public interface IDBHelper
    {
        void insert();
        void update();
    }
}

   1)类库DB.Mysql定义一个DBHelper 

namespace DB.MySql
{
    public class DBHelper : IDBHelper
    {
        public void insert()
        {
            Console.WriteLine("Mysql insert");
        }
        public void update()
        {
            Console.WriteLine("Mysql update");
        }
    }
}

  指定生成文件的位置,为了方便操作,我们存在在执行exe的目录里面(文件夹会自动生成,不需要我们自己新建,定义好输出路径就行)

  

  定义输出路径

..ConsoleApp1inDebugDB.MySql

  2)同理,Oracle的操作也一样

  类库DB.Oracle定义一个DBHelper 

    public class DBHelper : IDBHelper
    {
        public void insert()
        {
            Console.WriteLine("Oracle insert");
        }
        public void update()
        {
            Console.WriteLine("Oracle update");
        }
    }

  定义输出路径

..ConsoleApp1inDebugDB.Oracle

  3)主程序

namespace ConsoleApp1
{
    class Program
    {
        static string db = ConfigurationManager.AppSettings["db"];
        static void Main(string[] args)
        {
            Assembly assembly = Assembly.LoadFile(DllPath());//反射的入口
            IDBHelper helper = (IDBHelper)Activator.CreateInstance(assembly.GetType($"{db}.DBHelper"));
            helper.insert();
            Console.ReadLine();
        }
        /// <summary>
        /// 加载dll路径
        /// </summary>
        /// <returns></returns>
        static string DllPath()
        {
            var path = Application.ExecutablePath;
            //var serviceName = new FileInfo(path).Name;
            var serviceDirectory = new FileInfo(path).Directory;
            return $@"{serviceDirectory}{db}{db}.dll";
        }
    }
}

  主程序配置文件

  <appSettings>
    <add key="db" value="DB.MySql"/>
  </appSettings>
原文地址:https://www.cnblogs.com/wskxy/p/10655957.html