Voglio evitare la dipendenza ciclica in questo schema:
DbRepository ha bisogno di IUserDbEntityFactory per creare User entità che ha bisogno di IUserPublishedInfoInitializer per creare UserPublishedInfo su richiesta. E UserPublishedInfoInitializer stessa ha bisogno di IDbRepository per verificare se l'utente è attualmente presente nella cache e attivo per impostare la proprietà IsOnline su UserPublishedInfo .
Entrambi i metodi CreateUser e TryGetCachedUser utilizzano le stesse cose interne come la memorizzazione nella cache e i blocchi all'interno di DbRepository .
User è un'entità db radice di aggregazione senza interfaccia.
DbRepository richiede IUserDbEntityFactory che richiede IUserPublishedInfoInitializer per costruire User e riporta la dipendenza ciclica a DbRepository . Di solito uso l'iniezione della dipendenza del costruttore, ma in questo caso non funzionerà a causa della dipendenza ciclica, quindi questa è la domanda.
Inoltre, non voglio spostare MakePublishedInfo su User perché in effetti è una conversazione implicita in C # e viene usata molto frequentemente nel codice.
E passare IDbRepository a IUserPublishedInfoInitializer.Init come argomento non è né cosa voglio perché perché questa implementazione dovrebbe dipendere da cosa la sta usando? Questo rompe l'incapsulamento.
Solo sullo schema User e UserPublishedInfo sono oggetti creati dinamicamente (altri vengono creati all'avvio).
Dovrei cambiare questo disegno e come dovrebbe essere?