Size: a a a

2021 August 28

AS

Alexey Shcherbak in ctodailychat
в смысле должна быть ? если тебе нужен сервис - ты его инъекцию просто в конструктор или проперти добавляешь и все, ну и сервис должен быть в руте di зареган быть,  какие сложности то есть ? да, ловится только в рантайме, в конструкторе поэтому всегда проверяем депенденси и если она null - dependencyexception летит. так при первом же старте вылезут все места если забыл где что...
источник

AS

Alexey Shcherbak in ctodailychat
Все же не понимаю проблему - на что тесты то ? тесты что autofac какой работает корректно ? он это сам умеет, вызывает и проверяет все зависимости. Тесты компоненту что он сумеет подняться из контейнера ? Так это должен быть его единственный способ создания - из контейнера, другие то зачем. С DI нельзя быть частично, там или все (и так работает хорошо) или ничего..
источник

СА

Сергей Аксёнов... in ctodailychat
У меня есть пара мест где иметь null норма. Например сервису нужен репозиторий и кэш, но в целом он может работать и без кэша, чтобы при тестировании лишних моков не городить. Но в целом да, подход такой.
источник

AS

Alexey Shcherbak in ctodailychat
ну а тогда в рантайме он и так и так не поломается, если кэша нету
источник

СА

Сергей Аксёнов... in ctodailychat
Тест страхует от ошибки, когда я сделал новый компонент, добавил его как зависимость в другой, а в DI зарегать забыл.
источник

AS

Alexey Shcherbak in ctodailychat
хмм... а какой контейнер используешь ? если autofac - он точно умеет это при старте валидировать - ты даже рут скомпоновать не сможешь если у тебя такая ситуация, тесты не нужны
источник

СА

Сергей Аксёнов... in ctodailychat
Он не поломается в смысле не выкинет ошибку, но вообще без кэша он так деградирует, что лучше пусть поломается. А вставлять проверку на environment - это значит тащить environment как зависимость в компонент.
источник

СА

Сергей Аксёнов... in ctodailychat
У меня go, использую uber/dig )
источник

AS

Alexey Shcherbak in ctodailychat
тогда вставляй кэш всегда....
источник

СА

Сергей Аксёнов... in ctodailychat
Ну наверное придётся, да.
источник

AS

Alexey Shcherbak in ctodailychat
эмм, там же это антипаттерн вроде
источник

AS

Alexey Shcherbak in ctodailychat
я не эксперт но все знакомые  гошники утверждают что DI не нужен потому что антипаттерн в языке и язык этому в общем сопротивляется
источник

СА

Сергей Аксёнов... in ctodailychat
"Есть законы физики, остальное - рекомендации"
источник

A

Andrey in ctodailychat
Количество не прочитанных сообщений обнуляется
источник

AS

Alexey Shcherbak in ctodailychat
да, это тоже, я согласен, но тут в общем больше как с .нет самоваром в го не ездят.
источник

СА

Сергей Аксёнов... in ctodailychat
Поэтому есть типа полдесятка до сих пор поддерживаемых DI-контейнеров, включая гугловский Wire, фейсбучный inject и вот уберовский dig)

Wire, правда, работает на трушной кодогенерации, но как по мне - это ещё больше магии.
источник

AS

Alexey Shcherbak in ctodailychat
в общем в го не знаю чем помочь, сорри, это больше вопрос матерости конкретного DI контейнера, просто в языке где это "объязательно" - контейнеры уже все заматерели и такие вещи как проверить что в конфигурации нету ошибок - делаются по дефолту. Может и у dig есть ? я бы сильно удивился если бы опытные ребята из убера про такую фичу не подумали..
источник

OL

Oleg Lutsenko in ctodailychat
У стандартного DI из .NET Core тоже есть валидатор на старте.
https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.serviceprovideroptions.validateonbuild?view=dotnet-plat-ext-5.0
источник

MS

Max Syabro in ctodailychat
Ну и ладно
источник

AS

Alexey Shcherbak in ctodailychat
как выяснилось - сложность в golang, а не дотнетовская проблема
источник