Комментарии 7
Только runtime DI, только hardcore :)
)) посмотрел, есть отличия:
Все делается на этапе компиляции
Сервис локатора "резолви что хочешь" - нет, есть строго ограниченный набор корней композиций которые можно получить, так-как сгенерировать код для всех будет не разумно
Нет авто-скана привязок, так как, по моему опыту, это слишком не стабильно
Так как в рантайме работает примитивный код (new, new ...), которому ни чего не нужно, то и производительность выше некоторых решений для .NET на 3 порядка и доп памяти не нужно совсем
Судя по уравнению на коробке у кота на КДПВ, таки это не кот Шредингера, а кот Гейзенберга
А есть туториал, как перевести существующее приложение с MS.DI на Pure.DI? Есть вообще в этом смысл? По тому как разница по скорости в 2-3 не кажется существенной, будет ли она заметна в реальном приложении?
Туториала для миграции с MS.DI на Pure.DI в готовом виде нет, но при необходимости я могу подготовить краткий гайд за вечер — если это будет полезно.
Решать, стоит ли переходить на Pure.DI, вам, но я выделю ключевые плюсы и минусы, чтобы помочь взвесить решение:
Производительность. Pure.DI действительно быстрее — тесты это подтверждают. Однако важно помнить: тесты синтетические и измеряют только скорость создания объектов. В реальном приложении эта операция занимает доли процента от общего потребления CPU. К тому же MS.DI заметно ускорили в последних версиях, так что выигрыш в скорости вряд ли даст ощутимый эффект для большинства проектов.
Время холодного старта. Если критически важно сократить время запуска приложения (например, в serverless‑средах), Pure.DI может дать заметное преимущество.
Зависимости. Pure.DI не требует дополнительных рантайм‑зависимостей — всё генерируется на этапе сборки. Это упрощает деплой и снижает риск конфликтов версий.
Совместимость с экосистемой. Большинство библиотек для .NET предоставляют расширения именно для MS.DI. Например,
AddControllers(),AddAuthentication()и т. . При переходе на Pure.DI вам, скорее всего, придётся вручную регистрировать сервисы из сторонних пакетов — это добавит работы и потенциально может привести к ошибкам.Поддержка и сообщество. У MS.DI огромное сообщество и обширная документация. Найти решение проблемы или пример реализации гораздо проще. Кроме того, поскольку MS.DI используется в тысячах проектов, большинство «детских болезней» уже исправлены.
Гибкость и возможности. Pure.DI предлагает больше возможностей и даёт больший контроль над процессом DI. MS.DI более минималистичен, хотя и развивается.
Безопасность на этапе компиляции. В Pure.DI ошибки конфигурации (например, отсутствие регистрации сервиса или циклические зависимости) выявляются на этапе компиляции. В MS.DI они проявятся только во время выполнения, иногда в редких и не очевидных сценариях — что может стать сюрпризом в продакшене. Для критически важных систем (например, ПО для спутников или медицинского оборудования) это весомый аргумент в пользу Pure.DI.
Прозрачность и отладка. Код, сгенерированный Pure.DI, можно просмотреть и отладить, так как он не является «чёрным ящиком». С MS.DI логика разрешения зависимостей скрыта внутри библиотеки, что усложняет диагностику проблем.
Резюме. Если у вас уже есть работающее приложение на MS.DI, я бы не рекомендовал миграцию без веских причин (например, проблем с холодным стартом или необходимости в специфичных фичах Pure.DI). Это потребует времени на переделку, тестирование и может принести новые риски.
Если же вы начинаете новый проект, стоит осознанно взвесить все «за» и «против»: Pure.DI даст больше контроля и безопасности, а MS.DI — простоту интеграции с экосистемой и поддержку сообщества.

Pure.DI: новые возможности