GetMethod动态获取Dispose(bool Dispose)

本文关键字:Dispose bool GetMethod 获取 动态 | 更新日期: 2023-09-27 17:54:27

我目前正在尝试实现一个类,使用TypeBuilder来动态创建一个新类,该类派生自一个类,该类本身派生自DbContext(也就是说,动态类间接继承自DbContext)。

要重写(用 definemethomethod + definemethoverride ) Dispose类,我需要首先使用GetMethod检索它。我能够通过使用以下命令检索SaveChanges()方法:

typeof(TBaseDbContext).GetMethod("SaveChanges")

然而Dispose(bool Dispose)是完全不同的,因为它是受保护的,并且有参数。

将问题缩小到以下代码:

        MethodInfo disposeOfBase =
            typeof(DbContext).GetMethod("Dispose",
                BindingFlags.NonPublic,
                null,
                CallingConventions.Any,
                new Type[] { typeof(bool) },
                null);

disposeOfBase的结果为null。我尝试过不同的组合,但我认为上述应该是接近正确的。我不知道为什么没有找到Dispose

我在这里做错了什么?如何修改代码,使disposeOfBase保存DbContext的受保护Dispose方法的信息?

GetMethod动态获取Dispose(bool Dispose)

我测试了一下,它起作用了,所以我把上面的评论作为回答:

Try BindingFlags.NonPublic | BindingFlags.Instance。您必须指定Instance或Static来返回方法