项目中,在运行另一个反射类时出现问题,未能从程序集中加载类

class PopUpActionFactory
{
public static InterfacePopUpAction getAction(String actionName)
{
InterfacePopUpAction action = null;
actionName = "XSheet.Data.PopUpAction.PopUpAction" + actionName;
//XNamedTable
try
{
Type type = Type.GetType(actionName, true);
action = (InterfacePopUpAction)Activator.CreateInstance(type);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
System.Windows.Forms.MessageBox.Show("非法类型:" + actionName);
}
return action;
}
}

详细错误:

引发的异常:“System.TypeLoadException”(位于 mscorlib.dll 中)
System.TypeLoadException: 未能从程序集“XSheet, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“XSheet.Data.PopUpAction.PopUpActionSQLUpdate”。
在 System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
在 System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
在 System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)

尝试一:

问题初步排查,应该是夸程序集导致,调用Factory的代码,程序集是XSheet,而抽象工厂的程序集是XSheet.Data.PopUpAction

参考之前的成功的反射工厂,尝试进行测试

1.将接口类提升至XSheet.Data(为了项目的简洁,不将工厂类直接提升至XSheet)

2.设置中间类,是XSheet下的代码通过中间执行类(程序集同为XSheet.Data),再调用反射工厂进行类的实例化

测试,同样报错,测试失败

结果:

  纯属失误,通过但不调试,查看动态调用类的文本是PopUpActionSQLUpdate,放到程序中进行静态调用,发现无法调用,自习检查名称,居然是拼写错误,错误的将Action拼写成了Aciton,之前还检查过,结果没发现。。。。。。

公司内部项目,非盈利,发布在GitHub上大家可以一起交流,促进项目进步

https://github.com/sd23152243/XSheet

新手设计,欢迎提出改进建议

C#使用反射工厂模式遇到System.TypeLoadException(类名错误导致)的更多相关文章

  1. C#设计模式:工厂模式

    一,工厂模式 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  2. C#回顾 - 7.如何使用反射实现工厂模式?

    工厂模式是一种比较常用的设计模式,其基本思想在于使用不同的工厂类型来打造不同产品的部件.例如,我们在打造一间屋子时,可能需要窗户.屋顶.门.房梁.柱子等零部件.有的屋子需要很多根柱子,而有的屋子又不需 ...

  3. java 反射的应用 以及通过反射 用到的工厂模式

    java反射详解 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案 ...

  4. java反射机制(工厂模式)

    http://www.phpddt.com/dhtml/338.html java里面没有typeof,js有. 我终于实现了用反射机制编写的工厂模式.java反射在工厂模式可以体现. 包含产品接口类 ...

  5. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  6. (转)java反射机制及简单工厂模式

    第一步,定义一个接口类 package factory.face; /** * 接口,为了保证返回的对象可以统一用 Product接受 * @author Administrator */ publi ...

  7. [Java反射机制]用反射改进简单工厂模式设计

    如果做开发的工作,工厂设计模式大概都已经深入人心了,比较常见的例子就是在代码中实现数据库操作类,考虑到后期可能会有数据库类型变换或者迁移,一般都会对一个数据库的操作类抽象出来一个接口,然后用工厂去获取 ...

  8. Java反射+简单工厂模式总结

    除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...

  9. IOC的实现原理—反射与工厂模式的结合

    反射机制概念   我们考虑一个场景,如果我们在程序运行时,一个对象想要检视自己所拥有的成员属性,该如何操作?再考虑另一个场景,如果我们想要在运行期获得某个类的Class信息如它的属性.构造方法.一般方 ...

随机推荐

  1. MySQL 灵异事件一则 -- desc报语法错误

    今天有一开发同学找到我,说查询SQL中倒序报错,不明原因,于是奔赴工位现场研究情况. 果然,只要SQL中带有desc 就会报错,而ASC没问题. 哪怕desc放在句首用作explain也会报错. 报错 ...

  2. debian创建apt-proxy代理

    由于公司网络比较慢.所以需要建立一个代理服务器或镜象站点!考虑到创建和维护镜象的投入比较大!所以选择apt-proxy代理来做!可以缓解公司带宽不足的矛盾.而且只有在代理缓存,没有相应组件的情况下才去 ...

  3. jq层次选择器

    二. 层次选择器 1. parent > child(直系子元素) $(document).ready(function () { // 选取div下的第一代span元素,将字体颜色设为红色 $ ...

  4. oracle顺序控制语句goto、null和分页过程中输入输出存储、java程序的调用过程

    顺序控制语句1 goto建议不要使用 declare i number:=; begin loop dbms_output.put_line(i); then goto end_loop; end i ...

  5. Captcha生成及使用

    @Controller @RequestMapping("/PictureCheckCode") public class ServletController { @Request ...

  6. Autowired properities class

    1. Properties类 @ConfigurationProperties(locations = "classpath:build.properties") @JsonInc ...

  7. ubuntu14_pip 安装

    1:install pip python-dev    sudo apt-get install python-dev    sudo apt-get install libevent-dev     ...

  8. TCP基础知识

    TCP/IP网络协议栈分为应用层(Application).传输层(Transport).网络层(Network)和链路层(Link)四层.如下图所示 两台计算机通过TCP/IP协议通讯的过程如下所示 ...

  9. JavaScript 三种绑定事件方式之间的区别

    JavaScript三种绑定事件的方式: 1. <div id="btn" onclick="clickone()"></div> // ...

  10. Linux 命令 - passwd: 更改用户密码

    命令格式 passwd  [-k]  [-l]  [-u  [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactiveda ...