gpt4 book ai didi

ios - Swinject 容器注册失败

转载 作者:行者123 更新时间:2023-11-28 07:47:59 27 4
gpt4 key购买 nike

在尝试将某些协议(protocol)绑定(bind)到各种类时,我遇到了一种奇怪的行为,即在协议(protocol)中获取 nil。这是依赖注入(inject)器类:

class DependencyInjector: NSObject {

let container: Container

override init() {
container = Container()
super.init()
register()
}
}

extension DependencyInjector {

func register() {
container.register(NetworkProtocols.self) { _ in ApiManager() }.inObjectScope(.container)
container.register(ConnectivityManager.self) { r in
let controller = ConnectivityManager()
controller.network = r.resolve(NetworkProtocols.self)
return controller
}

container.storyboardInitCompleted(ChooseCameraViewController.self) {r,c in
c.network = r.resolve(NetworkProtocols.self)
}

container.storyboardInitCompleted(InstallationViewController.self) {r,c in
c.network = r.resolve(NetworkProtocols.self)
}

container.storyboardInitCompleted(CameraSetupViewController.self) {r,c in
c.network = r.resolve(NetworkProtocols.self)
}

container.storyboardInitCompleted(LoginViewController.self) { r,c in
c.network = r.resolve(NetworkProtocols.self)
}
}
}

这是AppDelegate:

var dependencyInjector: DependencyInjector!

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
dependencyInjector = DependencyInjector()

let window = UIWindow(frame: UIScreen.main.bounds)
self.window = window
let bundle = Bundle(for: ViewController.self)
let storyboard = SwinjectStoryboard.create(name: "Main", bundle: bundle, container: dependencyInjector.container)
window.rootViewController = storyboard.instantiateInitialViewController()

return true
}

在下面的类中,我在协议(protocol)属性中得到了 nil:

class ConnectivityManager: NSObject {

var network: NetworkProtocols!

func connectHotSpot() {
self.network.whoAmI(success: {
print("api succses")
}, failure: { (error) in
print(error.localizedDescription)
})
}
}

网络变量始终为 nil,而在其他使用 storyboardInitCompleted 的类中,网络变量有效。

我做错了什么?

最佳答案

正如@JakubVano 所说,我必须获得 ConnectivityManager 的一个实例:

    container.register(ConnectivityManager.self) { r in
let controller = ConnectivityManager()
controller.network = r.resolve(NetworkProtocols.self)
return controller
}

container.storyboardInitCompleted(ChooseCameraViewController.self) {r,c in
c.connectivityManager = r.resolve(ConnectivityManager.self)!

}

关于ios - Swinject 容器注册失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50482598/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com