有没有办法创建支持接口的 DynamicObject?

2024-06-28

我是否可以定义一个派生自 DynamicObject 并支持接口 (ICanDoManyThings) 的类,而不必实现接口中的每个方法?

我正在尝试创建一个动态代理对象,并希望此类上的方法调用由 MyProxyClass.TryInvokeMember 的实现来处理,这可能会也可能不会将它们传递给包装对象。

这可能吗?

Thanks


即兴界面 http://code.google.com/p/impromptu-interface/正是这样做的,它适用于任何 IDynamicMetaObjectProvider,包括 DynamicObject 子类和 ExpandoObject。

using ImpromptuInterface;
using ImpromptuInterface.Dynamic;

public interface IMyInterface{

   string Prop1 { get;  }

    long Prop2 { get; }

    Guid Prop3 { get; }

    bool Meth1(int x);
}

...

//Dynamic Expando object
dynamic tNew = Build<ExpandoObject>.NewObject(
         Prop1: "Test",
         Prop2: 42L,
         Prop3: Guid.NewGuid(),
         Meth1: Return<bool>.Arguments<int>(it => it > 5)
);

IMyInterface tActsLike = Impromptu.ActLike<IMyInterface>(tNew);

Linfu 实际上不会使用基于 DLR 的对象,而是使用它自己的幼稚后期绑定,这给了它一个SERIOUS性能成本。 Clay 确实使用了 dlr,但您必须坚持使用 Clay 对象,这些对象是为您将所有行为注入到 ClayObject 中而设计的,这并不总是那么简单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法创建支持接口的 DynamicObject? 的相关文章

  • WPF DataGrid 在行删除后失去焦点

    我正在使用 WPF DataGrid 通过键盘 删除 键进行行删除 但是 删除该行后 DataGrid 失去焦点 并且 DataGrid SelectedIndex 1 与WinForm datagrid相比 删除一行后 焦点自动转移到下一
  • 忽略控制器参数缺失导致的异常

    我有一个使用 MVC4 构建的面向互联网的网站 我偶尔会收到来自机器人或好奇的用户发送不完整 URL 请求的错误报告 例如 public class ProductController Controller HttpGet public v
  • C# 参数隐式转换

    有这个代码 class Program static void Main string args Check 3 Console ReadLine static void Check int i Console WriteLine I am
  • 当我使用 iText 从 PDF 文件中提取文本时,我从前一页获取值

    我正在尝试从多页 PDF 文件中每个页面的特定位置提取文本块 我知道文本的位置 并且能够在第一页上正确提取它 然而 在第一页之后的页面上 提取的文本似乎正在累积 例如 如果第 1 页上的文本值为 A 第 2 页为 B 第 3 页为 C 那么
  • 如何反向遍历 C# 集合?

    是否有可能有一个foreach将以相反顺序遍历 Collections 对象的语句 如果不是foreach声明 还有其他方法吗 你可以用普通的for向后循环 如下所示 for int i collection Count 1 i gt 0
  • 提高mmap memcpy文件读取性能

    我有一个从文件中顺序读取数据的应用程序 有些是直接从指向的指针读取mmaped 文件和其他部分是memcpyed 从文件到另一个缓冲区 我注意到在进行大型操作时性能不佳memcpy我需要的所有内存 1MB 块 以及在执行大量较小操作时的更好
  • ~ C 中的运算符

    该程序的输出是 13 我从来没有完全理解 C 中的 运算符 为什么它给出 13 作为输出 如何将 运算符限制为数字的 4 位 include
  • 在运行时更改语言的正确方法

    在运行时更改表单语言的正确方法是什么 使用递归手动设置所有控件 例如this https stackoverflow com questions 7556367 how do i change the culture of a winfor
  • 有关堆栈大小的警告消息

    I use Visual Studio 2010 with Code Analysis活性 在我的代码中 有一行在函数中分配一些内存 TCHAR someString 40000 代码分析抛出警告信息 警告 C6262 函数使用 40000
  • WTL 子窗口事件处理

    我正在开发窗口应用程序 因为我在左侧和右侧有 2 个子窗口 我想分别处理两个窗口的输入事件 如何实现 My code class EditorWindow public DxWindow public CSplitterWindow m v
  • 异步方法调用和模拟

    为什么模拟用户上下文仅在异步方法调用之前可用 我编写了一些代码 实际上基于 Web API 来检查模拟用户上下文的行为 async Task
  • 创建新文件夹的“Shell 命名空间”方式是什么?

    显然 这对于 win32 api CreateDirectory 来说是微不足道的 但我正在尝试托管一个 IShellView 并且希望以最面向 shell 的方式来做到这一点 我本以为 IShellFolder 中会有一个 createo
  • 指示 GDB 6.5 使用目标文件中嵌入的源代码

    我一直在努力让GNU gdb 6 5 14在调试时使用嵌入在目标文件中的源代码 而不是扫描某些目录 主要原因是我是为嵌入式平台开发的 并且是交叉编译的 这意味着所有源代码都在我的电脑中 我读到了关于 ggdb3标志 其中包含许多额外信息 包
  • 如何在Linux上正确设置串行通信

    我正在尝试从 FPGA 板读取数据以及向 FPGA 板写入数据 该板本身附带一个驱动程序 每当板插入时 该驱动程序都会创建一个名为 ttyUSB0 的终端设备 在 FPGA 上 实现了异步接收器和发送器 并且它们似乎可以工作 然而 C 方面
  • Boost的Dijkstra算法教程

    我很难弄清楚如何使用 Boost 的 Dijkstra 算法 我已经阅读了他们的示例和文档 但我仍然无法理解如何使用它 Boost的文档 http www boost org doc libs 1 50 0 libs graph doc d
  • C 中的 const 和指针

    将 const 与指针一起使用可能会导致指针对象无法通过使用相关指针取消引用来修改 但为什么我也不能修改指针不直接指向的内容呢 例如 int a 3 const int ptr a ptr 5 不会编译 但为什么 ptr 2 5 还编译不了
  • 将 make_shared 与可变参数模板绑定

    我正在尝试编写以下工厂类 但找不到正确的语法 template
  • IE8固定标题,可滚动GridView

    我知道有人问过这个话题 但这些帖子都已经过时了 或者在 IE8 上不起作用 简而言之 我们基本上想要在 GridView 中对列标题进行 Excel 样式锁定 我见过几个解决方案 其中一个 jquery css setExpression
  • 使用 解释 gprof 输出

    我试图在我的程序中找到性能问题 从而通过分析来检测代码 gprof 创建一个如下所示的平面配置文件 Flat profile Each sample counts as 0 01 seconds cumulative self self t
  • HTTPS文件下载C#

    我需要下载隐藏在 HTTPS 连接后面的文件 我对下载安全网站后面的文件不熟悉 我尝试使用凭据来解决此问题 但无济于事 据我所知 您需要创建并使用证书来完成此操作 但我没有找到任何示例 任何帮助表示赞赏 这就是我现在所拥有的 WebClie

随机推荐