I think I'd prefer a smart "Map" that simply evaluates the expression when get() is called; your solution would work, but I think a general solution that works for any `Type` may have applicability elsewhere in the framework. The Map would need to support cases (like in http inbound) where the evaluation context is mutated for each request, while also supporting a singleton instance for those cases where a single evaluation context can be used for all messages.

We'd need to be very careful documenting that it is "special" and only implements the Map interface and is not a real "Map" - what you "put" is not what you "get".