1.创建接口
using System;
using System.Collections.Generic;
using System.Text;
namespace zhazha.DB.Interface
{
public interface IDBHelper
{
void Query();
}
}
2.实现接口-》类库的方式
using System;
using zhazha.DB.Interface;
namespace zhazha.DB.MySql
{
public class MySqlHelper : IDBHelper
{
public MySqlHelper()
{
Console.WriteLine("MySqlHelper被构造");
}
public void Query()
{
Console.WriteLine("MySqlHelpe被实现了");
}
}
}
using System;
using zhazha.DB.Interface;
namespace zhazha.DB.SqlServer
{
public class SqlServerHelper : IDBHelper
{
public SqlServerHelper()
{
Console.WriteLine("SqlServer被构造");
}
public void Query()
{
Console.WriteLine("SqlServer被实现了");
}
}
}
3.工厂的创建
load是对应直接exe文件夹下的dll的名字,不用后缀~!其他的load方法不推荐有依赖的问题
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using zhazha.DB.Interface;
using System.Configuration;
namespace 发射
{
public class Factory
{
private static string IDBHelperConfig = ConfigurationManager.AppSettings["IDBHelperConfig"];
private static string DllName = IDBHelperConfig.Split(',')[0];
private static string TypeName = IDBHelperConfig.Split(',')[1];
//如果上面的static有错 构造都进不去!!会直接异常
public static IDBHelper CreateHelper()
{
Assembly assembly = Assembly.Load(DllName); //加载dll
Type type = assembly.GetType(TypeName); //获取类型幸喜
IDBHelper dBHelper = (IDBHelper)Activator.CreateInstance(type); //创建对象 +强制转换
return dBHelper ?? null;
}
}
}
注意app的配置文也做了相应的修改
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
<appSettings>
<add key="IDBHelperConfig" value="zhazha.DB.MySql,zhazha.DB.MySql.MySqlHelper"/>
</appSettings>
</configuration>
4.用工厂创建对象实例
class Program
{
static void Main(string[] args)
{
Assembly assembly = Assembly.Load("zhazha.DB.MySql"); //加载dll
Type type = assembly.GetType("zhazha.DB.MySql.MySqlHelper"); //lei
IDBHelper dBHelper = (IDBHelper)Activator.CreateInstance(type); //创建实例
dBHelper.Query();
Assembly assembly2 = Assembly.Load("zhazha.DB.SqlServer"); //加载dll
Type type2 = assembly2.GetType("zhazha.DB.SqlServer.SqlServerHelper"); //lei
IDBHelper dBHelper2 = (IDBHelper)Activator.CreateInstance(type2); //创建实例
dBHelper2.Query();
//------------Reflaction+Factory+Config-------------
IDBHelper dBHelper1= Factory.CreateHelper();
dBHelper1.Query(); //可配置 可扩展 反射动态 依照字符串
Console.ReadLine();
}
}