public static object CreateObject(string objectName,object [] args)
{
try
{
string dllName = CConfig.GetDll(objectName); //dllName最后得的的值是一个文件名,如Test.dll
Assembly assembly = Assembly.Load(dllName);
Type tp = assembly.GetType();
return Activator.CreateInstance(tp, args);
}
catch(Exception e)
{
EHComm.ShowError("Create object" + objectName + ":\n\r" + e.Message);
return null;
}
}
请问我这个对象工厂写法有错吗,调用时提示“Create objectEHClient:
找不到文件或程序集名称“EHClient.dll”,或找不到它的一个依赖项。”就是在那个Assembly.Load(dllName);语句出错,如何改,谢谢!
{
try
{
string dllName = CConfig.GetDll(objectName); //dllName最后得的的值是一个文件名,如Test.dll
Assembly assembly = Assembly.Load(dllName);
Type tp = assembly.GetType();
return Activator.CreateInstance(tp, args);
}
catch(Exception e)
{
EHComm.ShowError("Create object" + objectName + ":\n\r" + e.Message);
return null;
}
}
请问我这个对象工厂写法有错吗,调用时提示“Create objectEHClient:
找不到文件或程序集名称“EHClient.dll”,或找不到它的一个依赖项。”就是在那个Assembly.Load(dllName);语句出错,如何改,谢谢!
引了的话就不是对象工厂了吧?
Create objectEHClient:
找不到文件或程序集名称“D:\EhApp\bin\Debug\EHClient.dll”,或找不到它的一个依赖项。
未找到类型 System.Reflection.Assembly 上的构造函数。”
未找到类型 System.Reflection.Assembly 上的构造函数。”
=======
构造函数不匹配,
public class c1
{
public c1()
{}
}
you canActivator.CreatteInstance( t , null );
but
public class c1
{
public c1( int i)
{}
}
must
Activator.CreateInstance( t , new object[]{1});
我的类是没有参数没错,完整的代码如下:
using System;
using EHShare;namespace EHClient
{
/// <summary>
/// CTest 的摘要说明。
/// </summary>
public class CTest:ITest
{
public CTest()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public string GetDD(string kk)
{
return kkDeal(kk);
}
public string kkDeal(string kk)
{
return ((kk==null?"NULL":kk) + " is deal;");
}
}
}using System;namespace EHShare
{
/// <summary>
/// ITest 的摘要说明。
/// </summary>
public interface ITest
{
string GetDD(string kk);
string kkDeal(string kk);
}
}调用代码:
private ITest _myTest;
public ITest myTest
{
get
{
if (_myTest == null)
_myTest = (ITest)EHComm.CreateObject("EHClient");
return _myTest;
}
}
Type tp = assembly.GetType(); ///这里给的名称是什么??说句题外话,vs.net调试功能非常强大,你可以一步一步跟踪看看