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);语句出错,如何改,谢谢!

解决方案 »

  1.   

    dll被工程引用了吗 或者用绝对路径
      

  2.   

    EHClient.dll就是dllName
    引了的话就不是对象工厂了吧?
      

  3.   

    用绝对路径也不可以的
    Create objectEHClient:
    找不到文件或程序集名称“D:\EhApp\bin\Debug\EHClient.dll”,或找不到它的一个依赖项。
      

  4.   

    将Assembly.Load(dllName); 改成Assembly.LoadFrom(dllName);这里不会错了,但下面那句return Activator.CreateInstance(tp, args);还报错“Create objectEHClient:
    未找到类型 System.Reflection.Assembly 上的构造函数。”
      

  5.   

    将Assembly.Load(dllName); 改成Assembly.LoadFrom(dllName);这里不会错了,但下面那句return Activator.CreateInstance(tp, args);还报错“Create objectEHClient:
    未找到类型 System.Reflection.Assembly 上的构造函数。”
    =======
    构造函数不匹配,
      

  6.   

    ex
    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});
      

  7.   

    http://community.csdn.net/Expert/topic/5242/5242872.xml?temp=.278805
      

  8.   

    to hdt(倦怠) :
    我的类是没有参数没错,完整的代码如下:
    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;
    }
    }
      

  9.   

    GetObject( string , ... )
    Type tp = assembly.GetType(); ///这里给的名称是什么??说句题外话,vs.net调试功能非常强大,你可以一步一步跟踪看看
      

  10.   

    谢谢大家,我朋友帮我搞定了,原因很简单Type tp = assembly.GetType();得加上类名,再次感谢!
      

  11.   

    hdt(倦怠) 最后也帮我回答到点子上了,谢谢!