Не уверен, чего вы хотите достичь, но разве не логичнее c иметь что-то подобное?
public object Execute(Action<IMessage<object>> method, IMessage<object> parameter)
{
method(parameter);
}
obj.Execute(someObject.RunSomething, new SomeMessage{a= "b"});
В этом случае вы получите параметр, который передадите функции. Так что вы можете делать с ним все, что хотите.