【发布时间】:2016-11-06 04:55:27
【问题描述】:
我目前正在尝试实现一个类,该类使用 TypeBuilder 来动态创建一个新类,该类派生自一个本身派生自 DbContext 的类(间接使用动态类继承自 DbContext)。
要覆盖(使用 DefineMethod + DefineMethodOverride)Dispose 类,我需要先使用 GetMethod 检索它.我可以使用以下方法检索SaveChanges() 方法:
typeof(TBaseDbContext).GetMethod("SaveChanges")
但是 Dispose(bool disposing) 完全不同,因为它是受保护的并且有参数。
缩小问题范围,我得出以下代码:
MethodInfo disposeOfBase =
typeof(DbContext).GetMethod("Dispose",
BindingFlags.NonPublic,
null,
CallingConventions.Any,
new Type[] { typeof(bool) },
null);
disposeOfBase 中的结果为空。我尝试了不同的组合,但我认为以上应该接近正确。我不知道为什么找不到 Dispose。
我在这里做错了什么?如何修改代码以便 disposeOfBase 保存 DbContext 的受保护 Dispose 方法的信息?
【问题讨论】:
-
试试
BindingFlags.NonPublic | BindingFlags.Instance。您必须指定 Instance 或 Static 才能返回方法。
标签: c# .net reflection getmethod typebuilder