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