ivlevAstef / DITranquillity

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

Simple Extension - Arguments for initialization #123

Closed ivlevAstef closed 6 years ago

ivlevAstef commented 6 years ago

first step for: https://github.com/ivlevAstef/DITranquillity/issues/83

Так... ну это английский :)

Для чего эта идея изначально? - чтобы можно было передать во время инициализации объекта доп. параметры.

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

Но почему именно подменить, а что если:

register { Home(cat: $0, dog: $1, catName: arg($2), dogName: arg($3) }.as(IHome.self) 

Тогда подменять метод не надо, надо лишь в момент резолва подсунуть эти аргументы. Откуда их взять? правильно засетать в контейнер:

container.extension(for: IHome.self).setInitArgs("Felix", "Rex")

тогда мы сможем: 1) оставить проверки графа 2) оставим засекреченным класс реализации 3) Передавать аргументы при резолве на любую глубину.

Что мы не можем: 1) Проверить корректность аргументов, минимально допустимая точка проверки это вызов setArgs. Раньше нельзя. 2) Дать имена аргументам. (можно теги, но удобство использования нарушится) 3) Нету ассиста

И в будущем можно будет расширять набор методов: