Когда я хочу динамически вызывать статически определенный ( "статически" в смысле "определенный во время компиляции", а не в смысле метода "класс-член" ) для любого объекта в С#, я могу используйте отражение, чтобы получить дескриптор этого метода и вызвать его:
typeof(Foo).GetMethod("Bar").Invoke(foo, new object[] { /* params */ });
Однако объекты, сделанные динамическими, наследуя от DynamicObject, реагируют на вызовы метода экземпляра (undefined) с использованием TryInvokeMember, а динамические методы, на которые отвечает класс, не могут быть обнаружены посредством отражения по очевидным причинам. Это означает, что я не могу получить дескриптор метода для метода, на который должен отвечать TryInvokeMember.
Как ни странно, мне кажется, что вы не можете динамически вызывать динамический метод для объекта dynamic так же легко, как вы можете вызвать определенный метод для объекта dynamic.
Я рассмотрел вызов TryInvokeMember напрямую, но первым аргументом должен быть экземпляр InvokeMemberBinder, абстрактного класса. Я чувствую, что если мне нужно реализовать класс для вызова динамического метода для динамического объекта, я должен делать что-то неправильно.
Как я могу вызвать метод в объекте dynamic по его имени, зная, что целевой класс не реализует его и что он должен отвечать на использование TryInvokeMember?