读书人

利用反射技术动态加载指定类型有关问

发布时间: 2012-02-03 22:02:47 作者: rapoo

利用反射技术,动态加载指定类型问题
private static readonly string path = ConfigurationManager.AppSettings[ "assembly "];

public static IDAL.IAccount CreateAccount()
{
string className = path + ".Account ";
return (IDAL.IAccount)Assembly.Load(path).CreateInstance(className);
}
却出现了下面的错误!
"
未能加载文件或程序集“SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。
"什么问题来的?

[解决办法]
你确实需要程序支持多种数据库吗?

我不建议你这样做,直接引用效率更高。也更方便。何乐而不为?
[解决办法]
1、要把被反射的DLL文件引用的DLL文件都放到同一个目录下;
2、被反射的DLL文件要放在bin目录下。

我对发射不太了解,你试试看吧。
[解决办法]
很清楚了,找不到文件,path是什么来着?
[解决办法]
public static Assembly[] LoadDlls(string dllPath)
{
string[] dlls = Directory.GetFiles(dllPath, "*.dll ");
Assembly[] assemblyCollection = new Assembly[dlls.Length];
for (int i=0; i <= assemblyCollection.Length - 1;i++)
{
string dll = dlls[i].Substring(dlls[i].LastIndexOf(@ "\ ") + 1);
assemblyCollection[i] = Assembly.LoadFrom(dlls[i]);
}
return assemblyCollection;
}
[解决办法]
三句:

1、加载程序集:assemblyCollection[i] = Assembly.LoadFrom(dlls[i]);
2、获取程序集里的类:Type[] types = assembly.GetTypes();
3、反射得到实例:Activator.CreateInstance(type[i]);
[解决办法]
遇到过同样的问题,

如果你是基于组件的开发,可能是没有把某个dll引用到,看看bin目录下是否所有用的dll都存在了,没有的化引用一下
[解决办法]
你看一下你的DLL文件是不都引用了。
[解决办法]
分清楚 Load 和 LoadFrom 。
[解决办法]
System.Reflection.Assembly.Load( "app_code ")

既不是 AssemblyName,也不带后缀。从你的“string path”看起来,你是在读dll;从“className = path + ".Account ";”看起来,你又是把它当作AssemblyName了,四不像。
[解决办法]
学习了
[解决办法]
http://www.cnblogs.com/ltp/archive/2006/02/18/333295.html
李天平博客有详细说明
[解决办法]
Assembly ass = Assembly.Load( "名词空间.类名 ");
Type t = ass.GetType( "类名 ")

读书人网 >asp.net

热点推荐