Assembly.Load()不能加载程序集的问题

 在编程中,使用反射(IoC)是一个很好的架构。在.Net中,System.Reflection命名空间提供了对反射的支持。然而,很多朋友在使用Assembly.Load()方法时,  却不能正确装载程序集。比如,很多朋友在模仿PetShop的框架时,使用这样的调用方式:

string  assemblyName  =  ConfigurationManager.AppSettings[ " webDAL " ];
string  constructor  =  ConfigurationManager.AppSettings[ " constructorClass " ];  
    return  (IExample)Assembly.Load(assemblyName).CreateInstance(constructor,  false );

然而,在Assembly.Load()方法处,经常出现未能加载程序集的错误:

未能加载文件或程序集“webDAL”或它的某一个依赖项。系统找不到指定的文件

Assembly.Load(assemblyName) 实际上是在assemblyName.dll文件中查找类custructor的定义。例如,Assembly.Load("PetShop.SQLServerDAL").CreateInstance("PetShop.SQLServerDAL.Cateogry"),就是在PetShop.SQLServerDAL.dll程序集中查找PetShop.SQLServerDAL.Category类。而在自己定义类库时,往往忽视了生成的程序集的名称。

在类库项目上点击右键->属性,可以设定生成的程序集的文件名。只有正确设置了,才能在Assembly.Load(assemblyName)方法中避免找不到程序集的错误。

你可能感兴趣的:(编程,.net,框架,IOC,Constructor)