Как изменить объект в шаблоне внедрения зависимостей - PullRequest
0 голосов
/ 15 октября 2018

Итак, пока я работал над проектом, избегал Singletons и использовал Dependency Injection.Под этим я подразумеваю, вместо того, чтобы создавать общий экземпляр, я создал экземпляр класса и передал его всем контроллерам.

Теперь мой вопрос, мой объект модели, который имеет ссылки на все контроллеры, мне нужно указать их либо нановый объект в соответствии с требованиями, данные полностью обновляются, как при повторном вызове init().

Но если я сделаю это в определенном контроллере, эта ссылка будет указывать только на этот новый объект.

Так что, если вы понимаете, что я имею в виду, я хочу указать ссылки или где-то по адресу памятиэтот объект должен быть заменен на новый, и все ссылки должны указывать на этот старый адрес / новый объект.

1 Ответ

0 голосов
/ 15 октября 2018

Я думаю, вам нужно внедрить не модель в контроллеры, а службу для получения и сохранения этой модели, что-то вроде этого.

Протокол для службы:

protocol ModelServiceProtocol {
    func obtainModel(completion: (Model) -> Void)
    func save(model: Model, compleiton: ()->Void)
}

Пример ViewController с зависимостью:

class ViewController: UIViewController {
    let modelService: ModelServiceProtocol

    init(modelService: ModelServiceProtocol) {
        self.modelService = modelService
    }

    func obtainModel() {
        modelService.obtainModel { model in
            // do something
        }
    }

    func saveEditedModel() {
        modelService.save(model: model) {
            // model saved
        }
    }
}

Реализация ModelService, которая будет получать и сохранять вашу модель:

class ModelService: ModelServiceProtocol {
    func obtainModel(completion: (Model) -> Void) {
        // implementation of obtainig model from some storage
    }

    func save(model: Model, compleiton: ()->Void) {
        // implementation of saving model in some storage
    }
}

Внедрение зависимости:

func buildController() -> ViewController {
    let modelService = ModelService()
    let viewController = ViewController(modelService: modelService)
    return viewController
}

При таком подходе вы получите актуальнуюМодель в ViewController, отредактируйте и сохраните в некотором хранилищеМодель будет актуальна на каждом шагу

...