well, I find it unfortunate that the ClassMetadataFactory in the ORM (or in the ODM) gets the manager injected in it. It is breaking abstraction: the low level API (metadata one) depends on the higher level API (the manager), which itself depends again on this low level API. It is really dirty (and the only reason to really inject the manager is because it needs to be available in the event being dispatched, all other uses are about getting lower level API from the manager, which are the real dependencies).

Doctrine is a huge mess in term of abstraction (the manager is injected everywhere needing to access the configuration or the mapping for instance). The ORM cannot fix it until 2.3 for BC reasons, but you could try to fix it in the ODM.