我目前正在尝试实现一个使用 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 方法的信息?
答案 0 :(得分:1)
我测试了它并且它有效,所以我发布上述评论作为答案:
试试BindingFlags.NonPublic | BindingFlags.Instance
。 You must specify either Instance or Static to get a method back