Desde un punto de vista arquitectónico, es importante mantener un enfoque nítido sobre dónde se encuentra su Composition Root. Debe estar lo más cerca posible del punto de entrada de la aplicación, y usted debe componer todo el gráfico de dependencia en un solo lugar.
Hacer lo contrario puede crear confusión sobre las responsabilidades, y también corre el riesgo de introducir todo tipo de errores sutiles porque la instancia IFoo resuelta en un lugar puede o no ser igual a una instancia IFOO resuelta en otro lugar.
Si la aplicación es tan grande que resolver un gráfico de dependencia completo de una vez simplemente es prohibitivamente costoso, puede abordar esto usando lazy loading lifetimes en lugares estratégicos (alrededor de Aggregate Services).
Conceptualmente, siempre tengo un solo contenedor. (De vez en cuando tengo varios contenedores padre/hijo en juego para romper algunas dependencias circulares, pero eso es un detalle de implementación.)