Does Having DI Happen in the Composition Root go against the whole point of Dependency Injection?
No. Dovresti creare il grafico dell'oggetto nel Root di composizione .
Penso di capire la ragione della tua confusione. E penso che sia legato ai progetti ASP.NET. Per spiegare questo, lasciatemi dare un primo esempio che non riguarda ASP.NET.
Supponiamo di avere un'applicazione console. Abbiamo creato alcune librerie di classi che contengono tutti i pezzi di logica necessari per la nostra applicazione.
Diciamo che abbiamo creato le seguenti librerie di classi:
- ApplicationLibrary contiene classi correlate all'applicazione stessa. Potrebbe contenere anche qualche logica UI.
- BusinessLogicLibrary contiene classi correlate alla business logic.
- DataAccessLibrary contiene classi correlate all'accesso ai dati.
In questo caso ApplicationLibrary non ha un riferimento a DataAccessLibrary.
E poi componiamo questi pezzi insieme nel progetto Applicazione Console. Questo progetto in questo caso non contiene nulla tranne la composizione root.
La cosa con i progetti ASP.NET è che per impostazione predefinita si ottiene un modello in cui la radice di composizione e alcune logiche di Applicazione / UI si trovano nello stesso progetto.
Sarebbe bello avere un progetto web ASP.NET che contenga solo la radice della composizione (implementazione IControllerFactory
per esempio). Quindi sposta i nostri controller e viste in un'altra libreria di classi che non ha un riferimento a DataAccessLayer poiché non è più la radice della composizione.
Potresti riuscire a farlo anche con ASP.NET. Non sono sicuro che ci sia un modo semplice però.