Search code examples
c#.netreflectiongetmethodtypebuilder

GetMethod to get Dispose(bool disposing) dynamically


I am currently trying to implement a class that uses TypeBuilder to dynamically create a new class that derives from a class that itself derives from DbContext (i.o.w. the dynamic class indirectly inherits from DbContext).

To override (with DefineMethod + DefineMethodOverride) the Dispose class I need to retrieve it first using GetMethod. I was able to retrieve the SaveChanges() method by using the following:

typeof(TBaseDbContext).GetMethod("SaveChanges")

However the Dispose(bool disposing) is quite different in that it is protected and has arguments.

Narrowing down on the problem I came to the following code:

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

The result in disposeOfBase is null. I have tried different combinations but I think the above should be near to correct. I have no idea why the Dispose is not found.

What am I doing wrong here? How can I modify the code so that disposeOfBase holds the info of the protected Dispose method of DbContext?


Solution

  • I tested and it worked, so I'm posting the above comment as an answer:

    Try BindingFlags.NonPublic | BindingFlags.Instance. You must specify either Instance or Static to get a method back.