Il vantaggio del tuo attuale design è che gli osservatori possano controllare QUANDO stanno osservando. Quando un osservatore vuole iniziare a osservarlo registra (o si abbona se vuoi) con l'oggetto osservato (soggetto) chiamando un metodo di registrazione e passando un riferimento a se stesso.
All'interno dell'osservatore:
subject.register(this)
dopo
subject.unregister(this)
Sei preoccupato per questo creando una dipendenza non necessaria. L'unica dipendenza qui è nell'interfaccia del soggetto che garantisce che siano registrati e annullano la registrazione dei metodi da chiamare. Oh, e hai bisogno di un riferimento all'argomento.
Quindi non è tanto una questione di dipendenza. È una questione se vuoi che i tuoi osservatori siano responsabili di decidere quando osservano.
Se non vuoi che i tuoi osservatori abbiano la responsabilità di decidere quando osservano, hai bisogno di una terza cosa che si assumerà questa responsabilità.
È possibile fornire il soggetto con la sua lista di osservatori quando costruisce il grafico dell'oggetto. Dovrai chiamare ripetutamente un setter sull'argomento, chiamare un costruttore che prende un numero variabile di argomenti o passargli una raccolta di osservatori.
Se il tuo contenitore DI può fare qualcuna di queste allora può essere la tua "terza cosa". In caso contrario, potrebbe essere necessario scrivere codice di costruzione che funga da "terza cosa".