首页 > 解决方案 > 为什么在运行时使用动态抛出异常?

问题描述

我有一个外部 dll,我在运行时加载到我的 appdomain 中。

我正在从该程序集中创建一个类的实例到一个局部动态变量中。

据我了解动态在C#中的用法,我可以简单地调用它的一个方法,它将在运行时解决......

使用这种方法,下面的代码给我一个运行时“'object'不包含'Get'的定义”异常。

我将尝试说明结构,因为我无法公开实际代码。

外部 dll 名称:a.b.c

namespace Ext
{
  public static class FactoryCreator
  {
    public static ProxyFactory CreateFactory()
    {
        return new ProxyFactory();
    }
  }


  public interface FactoryIfc
  {
    Proxy Get();
  }

  internal class ProxyFactory: FactoryIfc
  {
    private Proxy proxy;

    public Proxy Get()
    {
      if (this.proxy == null)
        this.proxy = <a method to create a proxy>
      return this.proxy;
    }
  }
}

我正在使用以下代码

var assembly = "a.b.c, Version=1.0.0.0, Culture=neutral, PublicKeyToken=<key>,processorArchitecture=MSIL";
var instName = "Ext.FactoryCreator";
dynamic factoryCreator = AppDomain.CurrentDomain.Load(assembly).GetType(instName).GetMethod("CreateFactory").Invoke(null, new object[0]);
dynamic proxy = factoryCreator.Get();

我知道对于FactoryCreator动态变量,我需要获取类型并调用它的静态方法,但是......正如我所说,它抛出异常“'object'不包含'Get'的定义” - 在factory.Get()声明 - 虽然我希望dynamic factory自动解析到对象并为Get()调用提供服务。

在调试会话下观察情况,我可以清楚地看到在快速观察窗口中Get使用的方法。factory.GetType().GetMethods()

你能解释发生了什么吗?

在此处输入图像描述

我必须使用factory.GetType().GetMethod("Get")后跟一个Invoke吗?我认为dynamic应该在运行时自动解决这个问题......

标签: c#dynamicreflection

解决方案


推荐阅读