Я знаю, что внедрение зависимостей идеальным способом - это внедрение зависимостей через init () и использование для этого протоколов (интерфейсов).
Затем я могу использовать Swinject или Resolver для создания объектов. Но если цель приложения состоит в том, чтобы иметь вкусные, слабо разделенные объекты, что-то не так с использованием init () с аргументами по умолчанию.
final class MyViewModel: ObservableObject {
// MARK: - Repositories
private let repo: IMyRepository
// MARK: - Init
init(repo: IMyRepository = MyRepository()) {
self.repo = repo
}
}
Если я не использую фреймворки Swinject или Resolver или другой ручной контейнер зависимостей и используйте такую модель представления, которая имеет инъекцию в конструктор с использованием протокола и аргументов по умолчанию. Кажется, я легко могу создать MockMyRepository и вставить его сюда.