代码之家  ›  专栏  ›  技术社区  ›  JupiterP5

创建一个在dll中定义的对象,而我没有引用它

  •  2
  • JupiterP5  · 技术社区  · 14 年前

    我有dll的完整路径,但没有引用,在这里我需要实例化一个实现我定义的接口的对象。

    3 回复  |  直到 14 年前
        1
  •  2
  •   STW    14 年前

    您需要手动加载程序集,然后使用反射来查找并执行您感兴趣的方法。 Here's an article.

    这篇文章中有趣的呼吁/声明是:

    • Assembly.Load()

    • 搜索 Type 组件中包含的

    • 建筑物 MethodInfo ConstructorInfo

    • 打电话 .Invoke() 方法信息 构造器信息 Invoke() 本质上是告诉反射执行相应的方法。

        2
  •  0
  •   MaLio    14 年前

    如果调用构造此类型的方法,如果成功,它将返回一个对象。 我怀疑您所指的接口并不是严格意义上的.Net接口,而是一组用于访问该类型的公共方法。您也可以使用反射来调用它们。

        3
  •  0
  •   Rob    14 年前

    public static IMyType GetInstanceOfMyType()
    {
        var myTypeDescriptor = "My.Fully.NameSpaced.TypeName, My.Assembly.Name, Version=1.0.0.0, Culture=neutral"
    
        IMyType _instance = null;
    
        try
        {
    
        var myType = Type.GetType(myTypeDescriptor, true, true);
        if (inst.GetInterface("IMyType") != null)
        {
            // For a constructor that takes a single parameter, that's a string
            var constructorInfo = myType.GetConstructor(new Type[] { typeof(string) });
            _instance = (IMyType)constructorInfo.Invoke(new object[] { "String to Pass To Constructor" });
    
        }
        else
        {
            // Type isn't correct, complain here.
        }
        }
        catch (Exception ex)
        {
           // Log any errors here
        }
    
        return _instance;
    }
    

    • 您在中命名的类型 myTypeDescriptor
    • 我的类型描述符 不实现IMyType
    • 您在中命名的类型 没有与您在调用GetConstructor时指定的构造函数匹配的构造函数
    • ex.InnerException