C#反射Assembly 使用说明
2017-10-18 11:40
537 查看
var clazzNm = mappingMstDt.Rows[0][CommConst.ADDITION_PROC_CLASS_NM].ToString();
if (!string.IsNullOrEmpty(clazzNm))
{
// class名
classNm = mappingMstDt.Rows[0][CommConst.ADDITION_PROC_CLASS_NM];
// 追加処理
AdditionClassProc();
}
/// <summary>
/// 追加処理
/// </summary>
private void AdditionClassProc()
{
logger.Info("RenkeiService#AdditionClassProc() Start");
if (assembly == null)
{
//获取dll文件
var = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase.Replace(CommConst.FILE_URI, "")) + CommConst.YEN_MARK + Utility.Config.AppSettings.Settings[CommConst.ADDITION_DLL_PATH].Value);
//Assembly 通过此类可以加载操纵一个程序集,并获取程序集内部信息
assembly = Assembly.Load(AssemblyName.GetAssemblyName(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase.Replace(CommConst.FILE_URI, "")) + CommConst.YEN_MARK + Utility.Config.AppSettings.Settings[CommConst.ADDITION_DLL_PATH].Value));
}
//利用反射与Activator结合来创建对象。
System.Type类
Type是最常用到的类,通过Type可以得到一个类的内部信息,也可以通过它反射创建一个对象。一般有三个常用的方法可得到Type对象。
利用typeof() 得到Type对象
Type type=typeof(Example);
利用System.Object.GetType() 得到Type对象
Example example=new Example();
Type type=example.GetType();
利用System.Type.GetType() 得到Type对象
Type type=Type.GetType("MyAssembly.Example",false,true);
注意参数0是类名,参数1表示若找不到对应类时是否抛出异常,参数1表示类名是否区分大小写
dynamic clazz = Activator.CreateInstance(assembly.GetType(classNm));
//参数设定
var runMethodParams = new object[] { logger, util, ReportId, DempyoNo, ActionType, ReportNo, jikkonTm };
//通过 System.Reflection.MethodInfo能查找到类里面的方法
var runMethod = clazz.GetType().GetMethod(CommConst.RUN_METHOD);
//通过反射方法执行类里面的方法
runMethod.Invoke(clazz, runMethodParams);
logger.Info("RenkeiService#AdditionClassProc() End");
}
if (!string.IsNullOrEmpty(clazzNm))
{
// class名
classNm = mappingMstDt.Rows[0][CommConst.ADDITION_PROC_CLASS_NM];
// 追加処理
AdditionClassProc();
}
/// <summary>
/// 追加処理
/// </summary>
private void AdditionClassProc()
{
logger.Info("RenkeiService#AdditionClassProc() Start");
if (assembly == null)
{
//获取dll文件
var = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase.Replace(CommConst.FILE_URI, "")) + CommConst.YEN_MARK + Utility.Config.AppSettings.Settings[CommConst.ADDITION_DLL_PATH].Value);
//Assembly 通过此类可以加载操纵一个程序集,并获取程序集内部信息
assembly = Assembly.Load(AssemblyName.GetAssemblyName(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase.Replace(CommConst.FILE_URI, "")) + CommConst.YEN_MARK + Utility.Config.AppSettings.Settings[CommConst.ADDITION_DLL_PATH].Value));
}
//利用反射与Activator结合来创建对象。
System.Type类
Type是最常用到的类,通过Type可以得到一个类的内部信息,也可以通过它反射创建一个对象。一般有三个常用的方法可得到Type对象。
利用typeof() 得到Type对象
Type type=typeof(Example);
利用System.Object.GetType() 得到Type对象
Example example=new Example();
Type type=example.GetType();
利用System.Type.GetType() 得到Type对象
Type type=Type.GetType("MyAssembly.Example",false,true);
注意参数0是类名,参数1表示若找不到对应类时是否抛出异常,参数1表示类名是否区分大小写
dynamic clazz = Activator.CreateInstance(assembly.GetType(classNm));
//参数设定
var runMethodParams = new object[] { logger, util, ReportId, DempyoNo, ActionType, ReportNo, jikkonTm };
//通过 System.Reflection.MethodInfo能查找到类里面的方法
var runMethod = clazz.GetType().GetMethod(CommConst.RUN_METHOD);
//通过反射方法执行类里面的方法
runMethod.Invoke(clazz, runMethodParams);
logger.Info("RenkeiService#AdditionClassProc() End");
}
相关文章推荐
- C#反射Assembly 详细说明
- C#反射Assembly 详细说明【2】
- C#反射Assembly 具体说明
- C# 使用‘反射(Assembly)’查找具有指定‘特性(Attributes) ’的类
- C#反射Assembly 详细说明【1】
- C#反射Assembly 详细说明
- C#反射Assembly 详细说明(转)
- C#反射Assembly 具体说明
- C# Assembly.Load 反射使用详解
- C#反射Assembly 详细说明
- C#反射Assembly 详细说明
- 使用C#的反射机制(AssemblyInfo)时遇到的问题
- C#反射Assembly 详细说明
- C#反射Assembly 详细说明
- C#提高-------------------Assembly和Module的使用-------反射内涵
- c#的Assembly.Load.CreateInstance(反射)和.config的使用
- C#反射Assembly 详细说明
- C# 反射Assembly详细说明
- C#反射Assembly 详细说明,有项目例子
- C#反射Assembly 详细说明