Ho letto in diverse fonti, tra cui il blog di Ploeh di Mark Seemann su come l'appropriato il posizionamento della root di composizione di un contenitore IoC è il più vicino possibile al punto di ingresso di un'applicazione.
Nel mondo .NET, queste applicazioni sembrano essere comunemente pensate come progetti Web, progetti WPF, applicazioni console, cose con un'interfaccia utente tipica (leggi: non progetti di libreria).
È davvero contrario a questo consiglio saggio di posizionare la radice di composizione nel punto di ingresso di un progetto di libreria, quando rappresenta il punto di ingresso logico di un gruppo di progetti di libreria e il client di un gruppo di progetto come questo è il lavoro di qualcun altro, il cui autore non può o non vuole aggiungere la radice di composizione al proprio progetto (un progetto di interfaccia utente o ancora un altro progetto di libreria, anche)?
Ho familiarità con Ninject come un'implementazione del contenitore IoC, ma immagino che molti altri lavorino allo stesso modo in quanto possono cercare un modulo contenente tutte le configurazioni di rilegatura necessarie. Ciò significa che potrei inserire un modulo di binding nel proprio progetto di libreria per compilare l'output del progetto della mia libreria principale e, se il cliente volesse modificare la configurazione (uno scenario improbabile nel mio caso), potrebbe rilasciare una dll di sostituzione per sostituire il libreria con il modulo di binding.
Questo sembra evitare che i client più comuni abbiano a che fare con l'integrazione delle dipendenze e le radici di composizione, e farebbero l'API più pulita per il gruppo di progetto della biblioteca.
Tuttavia questo sembra volare di fronte alla saggezza convenzionale sulla questione. E 'solo che la maggior parte dei consigli là fuori fa presupporre che lo sviluppatore abbia un certo coordinamento con lo sviluppo dei progetti UI, piuttosto che il mio caso, nel quale sto solo sviluppando librerie che altri possano usare?