По номиналу они выглядят одинаково
Проще говоря, Factory Pattern, Creational Pattern помогает создать нам объект - «Определить интерфейс для создания объекта». Если у нас есть ключевое значение пула объектов (например, словарь), передав ключ к фабрике (я имею в виду простой шаблон фабрики), вы можете разрешить тип. Работа выполнена!
С другой стороны, структура внедрения зависимостей (например, Structure Map, Ninject, Unity и т. Д.), Похоже, делает то же самое.
Но ... "Не изобретай велосипед"
С архитектурной точки зрения это связующий слой и «Не изобретай велосипед».
Для приложения корпоративного уровня концепция DI - это скорее архитектурный уровень, который определяет зависимости. Чтобы еще больше упростить это, вы можете думать об этом как об отдельном библиотечном проекте, который разрешает зависимости. Основное приложение зависит от этого проекта, где решатель зависимостей относится к другим конкретным реализациям и разрешению зависимостей.
В дополнение к «GetType / Create» из Фабрики, чаще всего нам нужны дополнительные функции (возможность использовать XML для определения зависимостей, макетирование и модульное тестирование и т. Д.). Поскольку вы ссылались на Карту структуры, посмотрите список функций Карта структуры . Это явно больше, чем просто разрешение простого сопоставления объектов. Не изобретай велосипед!
Если у вас есть только молоток, все выглядит как гвоздь
В зависимости от ваших требований и типа создаваемого приложения вам необходимо сделать выбор. Если в нем всего несколько проектов (может быть один или два ...) и в нем мало зависимостей, вы можете выбрать более простой подход. Это похоже на использование доступа к данным ADO .Net по сравнению с использованием Entity Framework для простых вызовов базы данных 1 или 2, где внедрение EF в этом случае является излишним.
Но для более крупного проекта или если ваш проект становится больше, я бы настоятельно рекомендовал иметь слой DI с каркасом и освободить место для изменения используемой вами структуры DI (используйте фасад в основном приложении (Web App, Web Api, рабочий стол .. и т. Д.).