Raz som pri unit testoch potreboval spustiť súkromnú metódu rodičovskej triedy pomocou reflexie. Problémom je, že metóda
GetMethod
triedy
System.Type
nevráti
MethodInfo
pre súkromné metódy definované na úrovni rodičovskej triedy. Môj trik spočíva v tom, že
MethodInfo
je vytvorené pre rodičovskú triedu a
Invoke
je volané s parametrom kde je odkaz na triedu potomka:
1: // Faq inherits from BusinessObject
2: Faq faq = new Faq();
3: RunPrivateMethodOnBusinessObject(faq, "CreateInsertCommand")
4:
5: private object RunPrivateMethodOnBusinessObject(object obj, string methodName)
6: {
7: MethodInfo method = typeof(BusinessObject).GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic);
8: return method.Invoke(obj, null);
9: }
Žiadne komentáre:
Zverejnenie komentára