- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
此时,在我的项目中,我使用 Swinject(DI 容器)。
如果我有以下层次结构,我想知道如何注册 ViewController:
class RateAnswersBaseVC: UIViewController { }
class RateAnswersDoctorVC: RateAnswersBaseVC { }
class RateAnswersQualityVC: RateAnswersBaseVC { }
如何将自己的权利注册和使用?在我使用第一个选项的项目中,此时我有两个选项,但感觉我们应该使用第二个:)
// ------- 1 --------
container.register(RateAnswersDoctorVC.self) { r in
let vc: RateAnswersDoctorVC = RateAnswersDoctorVC()
self.configureBasicFields(with: vc, container: container, resolver: r)
return vc
}
container.register(RateAnswersQualityVC.self) { r in
let vc: RateAnswersQualityVC = RateAnswersQualityVC()
self.configureBasicFields(with: vc, container: container, resolver: r)
return vc
}
// ------- 2 --------
container.register(RateAnswersBaseVC.self, name: "doctor") { r in
let vc: RateAnswersDoctorVC = RateAnswersDoctorVC()
self.configureBasicFields(with: vc, container: container, resolver: r)
return vc
}
container.register(RateAnswersBaseVC.self, name: "quality") { r in
let vc: RateAnswersQualityVC = RateAnswersQualityVC()
self.configureBasicFields(with: vc, container: container, resolver: r)
return vc
}
如果您解释为什么使用其中一种方法,我将很高兴。
感谢回复
最佳答案
上次我在项目中使用 MVVM 模式。因此,我将应用程序的业务逻辑拆分为模块 - 提供某些功能或业务逻辑的完整代码部分(例如在应用程序中登录、全屏播放视频等)。我为每个模块创建一个 Assembly
对象来配置模块中的依赖项。
class PasswordAssembly: Assembly {
func assemble(container: Container) {
container.register(PasswordViewInterface.self) { (_: Resolver) in
PasswordViewController(nibName: "PasswordViewController", bundle: nil)
}
.initCompleted { resolver, view in
var view = view as PasswordViewInterface
view.viewModel = resolver.resolve(PasswordViewModelInterface.self)
view.router = resolver.resolve(PasswordRouterInterface.self)
}
container.register(PasswordViewModelInterface.self) { (resolver: Resolver) in
return PasswordViewModel(coreModel: resolver.resolve(CoreViewModelInterface.self)!)
}
container.register(PasswordRouterInterface.self) { _ in
return PasswordRouter()
}
.initCompleted { (resolver, router) in
var router = router as PasswordRouterInterface
router.view = resolver.resolve(PasswordViewInterface.self)
router.resolver = container
}
}
}
我还注入(inject)路由器 Resolver
(Container) 对象来制作 Router
构建层次结构
protocol PasswordRouterInterface {
var view: PasswordViewInterface! { get set }
var resolver: Resolver! { get set }
func presentFilesListView()
func presentContentView()
}
class PasswordRouter: PasswordRouterInterface {
var view: PasswordViewInterface!
var resolver: Resolver!
func presentFilesListView() {
if let listViewController = resolver.resolve(FilesListViewInterface.self)?.getViewController() {
let navigationController = UINavigationController(rootViewController: listViewController)
view.getViewController().present(navigationController, animated: true) {
}
}
}
func presentContentView() {
}
}
关于ios - Swinject 注册 UIViewController 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43055836/
我正在使用很棒的 Swinject对于我的项目中的 DI,但我在没有程序集的情况下使用它(当我开始使用 Swinject 时,还没有程序集)。 我目前的使用模式Containers是: class P
我正在寻找一种方法来测试服务是否已在 .Container 范围内解析。我的应用程序在启动时启动了一些“服务”,我想确保这些服务已得到解决,而不触发它们被解决。 最佳答案 您可以在工厂闭包中添加日志记
我在我的 swift 项目中使用 Swinject 进行 DI。我认为使用弱对象作用域会导致泄漏。 我有这个虚拟对象 protocol DevTestProtocol: class {} class
在尝试将某些协议(protocol)绑定(bind)到各种类时,我遇到了一种奇怪的行为,即在协议(protocol)中获取 nil。这是依赖注入(inject)器类: class Dependency
我正在尝试创建一个函数来返回一个元类型数组,然后我可以使用它来解析来自 Swinject Resolver 的实例。这是我的代码: protocol Task: class { } func getT
我在我的 Swift iOS 应用程序中使用 Swinject,并尝试按照官方文档页面上的说明进行循环依赖:https://github.com/Swinject/Swinject/blob/mast
我有一个问题,我在单独的框架中使用 Swinject。 我的应用从这个框架获取对象,我的 appExtension 也使用它。 但在扩展中,对象没有正确实例化。 Swinject 是使用我的对象的第一
我正在使用 Swinject在我的 Swift 3 应用中。当我尝试时 let container = Container() container.register(NetworkModeling.s
目前我这样做: container.register(TabBarViewModelable.self) { (_, tabBarItems: [TabBarItemType]) in
每当我运行此代码时,VCModel 的 init() 都会被调用,但 Swinject 不会将 VCModel 实例注入(inject)到我的 ViewController 中。有人可以告诉我我做错了
我使用 SWInject 来维护我的应用程序中的依赖关系,并使用协调器模式来管理逻辑和依赖关系。 SWInject 能否与应用程序不同部分的多个观察者的集中式推送通知框架结合使用? 通常,我使用 Si
我开始在我的应用程序中使用 Swinject,我想在 presenter(Viper/MVP) 或 viewControllers(不是毒蛇)。我遇到的主要问题是我想在 presenters 中共享
import Swinject class GenericsAssembly: Assembly { func assemble(container: Container) {
此时,在我的项目中,我使用 Swinject(DI 容器)。 如果我有以下层次结构,我想知道如何注册 ViewController: class RateAnswersBaseVC: UIViewCo
是否可以解决/创建未在 Swinject 容器中注册的对象的新实例?在 C#(来自 Microsoft)的 Unity 依赖注入(inject)中就是这样。 我想解析 viewModel 类,它依赖于
假设我们有一个 UITableViewController,它在 didSelectRowAtSection 上加载了一个名为即 ClassToInject 的类的实例,它希望通过一个属性注入(inj
我正在尝试使用 Swinject 注入(inject)依赖项,但我不知道自己做错了什么。 我有处理注册字符串用户的协议(protocol)。 protocol AuthServiceProtocol
我有一个测试项目,我试图将参数传递给 Swinject 中的 resolve 方法项目。 这是我的 Swinject Storyboard扩展文件中包含的示例。 import Swinject ext
这个问题是给有很多Swinject经验的人的对于 swift 。 我会展示有问题的代码,我的问题在底部。 代码有点多,抱歉。 这是 MySwinjectStoryboard.swift 注册: imp
我正在使用 Swinject 来注入(inject)依赖项,到目前为止效果很好。但现在我有一个场景,其中我有一个 ViewController,它依赖于它的 ViewModel。 ViewModel
我是一名优秀的程序员,十分优秀!