is it possible to use IoC and Rich Domain? Are their any good
examples, open source projects that do that?
Immagino tu intenda DI invece di IoC, e il progetto su cui hai lavorato utilizza un contenitore DI come Spring. IoC ha due sapori principali: DI e Pattern Locator. Non vedo perché il pattern Locator dovrebbe essere un problema, quindi concentriamoci su DI.
Non penso che sia possibile, o almeno sarebbe molto difficile. L'aspetto principale dei contenitori DI è che controllano la creazione di oggetti quando li iniettano in altri ("oggetti gestiti"). L'insieme di oggetti gestiti che è vivo durante l'esecuzione dei progetti è indipendente da quali elementi di dominio esistono nel progetto, ma dipende da come gli oggetti sono cablati e da quali ambiti (singleton, prototipo) sono assegnati.
Questo è il motivo per cui non vuoi lasciare che il contenitore DI gestisca i tuoi oggetti di dominio. Ma se crei oggetti manualmente (con nuovo), non puoi ottenere altri oggetti iniettati ai tuoi oggetti di dominio. (Lasciando da parte le possibili soluzioni alternative con il cablaggio manuale.) Poiché sono necessarie queste iniezioni per sostituire le implementazioni con altre, non è possibile sostituire la funzionalità degli oggetti con dominio avanzato utilizzando DI. Quindi, non vorrai inserire funzionalità negli oggetti del dominio, altrimenti perderai le funzionalità del DI.
Non vedo come potrebbe funzionare un ipotetico contenitore DI che non gestisce i tuoi oggetti e nessuna delle implementazioni esistenti lo consente. Quindi è giusto sostenere che DI si basa sulla gestione degli oggetti. Pertanto ti tenterà sempre di suddividere potenziali oggetti Rich Domain in una classe anemica e una o più classi di script di transazione.