¿Es posible usar IoC y Rich Domain? ¿Son buenos ejemplos, proyectos de código abierto que hacen eso?
Supongo que te refieres a DI en lugar de IoC, y el proyecto en el que trabajaste usa un contenedor DI como Spring. IoC tiene dos sabores principales: DI y patrón de localización. No veo por qué el patrón Localizador debería ser un problema, así que centrémonos en DI.
No creo que sea posible, o al menos sería muy poco práctico. El aspecto principal de los contenedores DI es que controlan la creación de objetos cuando los inyectan en otros ("objetos administrados"). El conjunto de objetos administrados que está vivo cuando se ejecutan los proyectos es independiente de los elementos de dominio que existen en su proyecto, pero depende de cómo están conectados los objetos y qué ámbitos (singleton, prototipo) se les asignan.
Es por eso que no desea permitir que el contenedor DI administre sus objetos de dominio. Pero si crea objetos manualmente (con nuevo), no puede inyectar otros objetos a sus objetos de dominio. (Dejando a un lado las posibles soluciones alternativas con el cableado manual). Dado que necesita estas inyecciones para reemplazar las implementaciones con otras, no puede reemplazar la funcionalidad de los objetos de dominio enriquecido con DI. Por lo tanto, no querrá colocar la funcionalidad en objetos de dominio, o perderá las características de la DI.
No veo cómo podría funcionar un contenedor DI hipotético que no administra sus objetos, y ninguna de las implementaciones existentes lo permite. Por lo tanto, es justo afirmar que DI se basa en la gestión de objetos. Por lo tanto, siempre tendrá la tentación de dividir los objetos potenciales de Rich Domain en una clase anémica y una o varias clases de script de transacción.