ivlevAstef / DITranquillity

Dependency injection for iOS (Swift)
MIT License
422 stars 32 forks source link

Множественные одинаковые register #163

Closed VasilyKrainov closed 1 month ago

VasilyKrainov commented 2 years ago

При наличии нескольких одинаковых register resolve падает с критической ошибкой:

protocol P {
}

class C: P {
}

container.register(C.init).as(P.self).lifetime(.single) // 1
container.register(C.init).as(P.self).lifetime(.single) // 2
let obj: C = container.resolve() // crash

Ситуация довольно типовая, когда выражения 1 и 2 находятся в разных модулях. lifetime ситуацию не меняет.

ivlevAstef commented 2 years ago

Здравствуйте. Да такое не разрешено (в любой библиотеке, где-то просто это не пишется как ошибка, а просто игнорирует одну из регистраций), по как по мне понятным причинам - зачем регистрировать в один контейнер одинаковые зависимости? А если вы в одном месте решите слегка изменить её (тотже lifetime разный сделать), то какую зависимости нужно брать?

Да и простой пример - вы же класс один и тот же в разных модулях почему-то не создаёте.

Регистрация зависимости должна быть в модуле где эта зависимость создана, а не где планируется использоваться.

VasilyKrainov commented 2 years ago

мысль понял, спасибо за разъяснение. Попробую реструктурировать приложение, чтоб была одна регистрация