Обновить

Комментарии 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 — простоту интеграции с экосистемой и поддержку сообщества.

Спасибо! Примерно так и предполагал: основной плюс получается "Безопасность на этапе компиляции", основной минус "Совместимость с экосистемой". Минус существенный, была надежда, что его не будет)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации