Здравствуйте, ·, Вы писали:
·>Здравствуйте, varenikAA, Вы писали:
AA>>// Что тут неявного?
·>Непонятно кто от кого и как зависит.
AA>>Зато точка сборки приложения одна а не размазана по разным сборкам.
·>Просто делай то же самое, но без контейнера. Если я правильно разгадал твой код:
·>·>var dbOptions = new DbOptions()
·> .UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
·>var dbContext = new DbContext(dbOptions);
·>var mainService = new MainService(dbContext);
·>services.AddHostedService(mainService);
·>
·>Код внезапно стал проще — никаких лямбд, генериков, рефлексии, даункастов. Можно использовать IDE вовсю — find usages, declarations, использовать рефакторинги.
Серьезно? "найти все ссылки" работает прекрасно и в первом случае.
Рефакторинг? Назовите хоть одну проблему.
DI никуда ни делся, только добавили кучу не нужных new.
От интерфейсов м механизма DI все равно никуда спрятаться в клиентском коде, хотя для получения ссылки, хоть для создания локального скоупа,
либо придется всюду делать ссылку на реализацию. Это отлично работает если у вас развитые средства рефакторинга, но это признак сильных зависимостей.
Вообще если посмотреть на техники ФП, то там все на интерфейсах(любая функция по сути это он и есть),
только за счет возможностей ЯП еще и вызов зависимости выносится за скобки, т.к. есть возможность создавать
вычислительные выражения.
"польза" Dependency Injection для ЯП типа C# очевидна. Не понимаю, почему нужно изобретать велосипед, когда есть отличная билт-ин реализация в коре(быть может вы все еще работает на легаси, тогда — да, только лисопед)?