c# - 为什么在运行时使用动态抛出异常?
问题描述
我有一个外部 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
应该在运行时自动解决这个问题......
解决方案
推荐阅读
- node.js - 抛出 HTTP 嵌套异常会导致 Promise 被拒绝
- python - 在函数中使用 tkinter 从列表输入返回子列表
- reactjs - 如何将 MenuItem 用作 NavLink?
- json - 使用 Azure 数据工厂从 Cosmos DB 文档中提取数组属性
- iis - IIS URL 重写无法通过搜索引擎工作
- php - 有没有办法可以从服务器恢复已删除的 .env laravel 文件
- docusignapi - API - 每个状态更新的唯一标识符?
- function - 使用ggmap时无法解决“R中的函数错误
- html - 如何用类包装文本?
- rest - REST - 保存相关实体