版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41660162/article/details/79837991
调用类:
class Program
{
static void Main(string[] args)
{
SafeInvoke(() =>
{//通过委托实现通用的异常处理
#region 通过反射创建对象
{
//1 动态加载 默认加载当前路径的dll文件,不需要后缀
Assembly assembly = Assembly.Load("Work.DB.Sqlserver");
Assembly assembly1 = Assembly.LoadFile(@"E:\winningjob\C#workspace\Projects\MyHomeWork\Work.DB.Sqlserver\bin\Debug\Work.DB.Sqlserver.dll");
Assembly assembly2 = Assembly.LoadFrom("Work.DB.Sqlserver.dll");// 可以是当前路径 也可以是完整路径
//2 获取类型 (获取类型信息的方式不止一个)
Type typeDBHelpher = assembly.GetType("Work.DB.Sqlserver.DBHelper");
//3 创建对象
object oDBHelper = Activator.CreateInstance(typeDBHelpher);
//4 调用方法 实例方法、静态方法、重载方法 选修:调用私有方法 调用泛型方法
{//无参数
MethodInfo method = typeDBHelpher.GetMethod("Show");
method.Invoke(oDBHelper, null);
}
{//有参数
MethodInfo method = typeDBHelpher.GetMethod("MxdQuery");
method.Invoke(oDBHelper, new object[] { "测试入参" });
}
{//泛型参数
MethodInfo method = typeDBHelpher.GetMethod("ShowGeneric");
method = method.MakeGenericMethod(typeof(string));//如果是泛型方法,那么需要先制定参数的类型
method.Invoke(oDBHelper, new object[] { "测试入参" });
}
{//当需要获取的方法有重载方法的时候,获取方法时需要指定参数顺序和类型
MethodInfo method = typeDBHelpher.GetMethod("Show_重载", new Type[] { });
method.Invoke(oDBHelper, null);
MethodInfo method1 = typeDBHelpher.GetMethod("Show_重载", new Type[] { typeof(string) });
method1.Invoke(oDBHelper, new object[] { "测试入参" });
}
}
#endregion
Console.WriteLine("*************************************************");
#region 创建对象 反射+简单工厂+配置文件 ioc
{
//IDBHelper oDBHelperFactory = SimpleFactory.CreatDBHelper();
var oDBHelperFactory = SimpleFactory.CreatDBHelper<IDBHelper>();
oDBHelperFactory.QueryEntity<User>(1);//这里是测试根据Id获取一行数据
oDBHelperFactory.QueryEntityList<Company>();//这里测试获取模型表的所有数据
}
#endregion
});
}
/// <summary>
/// 通用的异常处理
/// </summary>
/// <param name="act">对应任何的逻辑</param>
public static void SafeInvoke(Action act)
{
try
{
act.Invoke();
}
catch (Exception ex)//按异常类型区分处理
{
Console.WriteLine(ex.Message);
}
}
}
简单工厂类:
class SimpleFactory
{
//获取配置文件中的数据库连接字符串
private static string IDBHelperConfig = ConfigurationManager.AppSettings["IDBHelper"];
private static string dllName = IDBHelperConfig.Split(',')[1];
private static string className = IDBHelperConfig.Split(',')[0];
public static T CreatDBHelper<T>()
{
if (true)//方式一
{
//1 动态加载
Assembly assembly = Assembly.Load(dllName);
//2 获取类型
Type typeDBHelper = assembly.GetType(className);
//3 创建对象
object oDBHelper = Activator.CreateInstance(typeDBHelper);
//4 类型转换
return (T)oDBHelper;
}
else//方式二
{
return (T)Activator.CreateInstance(dllName, className).Unwrap();
}
}
}