С архитектурной точки зрения важно сохранять четкую фокусировку на том, где находится Composition Root . Он должен быть как можно ближе к точке входа приложения, и вам следует составить весь граф зависимостей в одном месте.
В противном случае может возникнуть путаница в отношении обязанностей, и вы также рискуете ввести всевозможные тонкие ошибки, поскольку экземпляр IFoo, разрешенный в одном месте, может совпадать или не совпадать с экземпляром IFoo, разрешенным в другом месте.
Если приложение настолько велико, что разрешение всего графа зависимостей за один раз просто непомерно дорого, вы можете решить эту проблему, используя время отложенной загрузки в стратегических местах (около Aggregate Services ).
Концептуально, у меня всегда есть только один контейнер . (У меня иногда есть несколько родительских / дочерних контейнеров, чтобы сломать некоторые циклические зависимости, но это деталь реализации.)