问题标签 [swinject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
388 浏览

ios - Swinject:在工作区中使用多个模块(项目)时解析失败

我正在尝试使用 Swinject 为多模块工作区设置 DI。我有一个ParentProject嵌入二进制框架的地方ChildProject(因此ParentProject包括来自 的所有公共代码ChildProject)。

我的方法是为每个模块创建一个程序集,然后在 ParentProject 中将它们组合在一起。我得到的错误对我来说真的很奇怪,取一个NSPersistentContainer

Swinject: Resolution failed. Expected registration: { Service: NSPersistentContainer, Factory: Resolver -> NSPersistentContainer } Available registrations: { Service: NSPersistentContainer, Factory: Resolver -> NSPersistentContainer, ObjectScope: container }

ParentProject 的装配示例:

public class ParentProjectAssembly: Assembly { ... public func assemble(container: Container) { ... container.register(NSPersistentContainer.self) { _ in return self.persistentContainer }.inObjectScope(.container) ... } }

如果我将这个注册码移到或者我在他们两个中都有这个注册并不重要ChildProjectAssembly,错误总是一样的。我的汇编器只是Assembler([ParentProjectAssembly(), ChildProjectAssembly()]在 ParentProject 的 AppDelegate 中(现在)。似乎一切正常,assemble(container:)方法对所有程序集都有相同的容器,一些注入确实有效,但其他人有这个错误提示我应该在不指定 objectScope 的情况下注册服务?那是不可能的。

帮助

0 投票
3 回答
814 浏览

swift - 类型“SwinjectStoryboardOption”不符合协议“ServiceKeyOption”

在我对我的项目 Cocoapods 进行了全新安装之后,该项目在全新安装之前工作,现在当我编译时出现该错误:

我如何解决它?

0 投票
2 回答
523 浏览

swift - RxSwift:将实际可观察​​对象传递给另一个视图控制器?

我有一个视图控制器,它需要了解从另一个视图控制器设置的布尔变量 headerCollapsed。在vc1中我有:

以及将布尔值设置为 true 的函数:

然后,为了避免创建进一步的依赖关系并直接调用 vc1,我试图通过依赖注入和路由器将collapsedObservable而不是headerCollapsed一直传递到vc2。我试图简化这个问题,但实际上 vc1 和 vc2 之间有好几层。

但是发生的事情是,无论如何,在我的路由器类collapsedObservable 内部都是nil,并且我无法将其设置为默认值,以便稍后在我从vc2 内部调用它时进行更新。那么,像这样传递实际的 observable 是可能的吗?

0 投票
1 回答
431 浏览

ios - 如何解决依赖关系 swinject(没有情节提要),另一个重要的控制器在哪里作为 rootVC?

我的应用程序中没有情节提要。所以我所有的依赖项都在 App Delegate 中说明了。我阅读了 Swinject 的文档,并建议了该选项:

window.rootViewController = container.resolve(PersonViewController.self)

但在我的例子中,根控制器是标签栏控制器 ( MainTabBarController()),它设置我的收藏视图和其他选项的布局。如何解决这个问题?

最初,我尝试通过 Swinject Storyboard 完成所有操作,但 storyboardInitCompleted() 对我不起作用,我viewModel: ViewModelProtocol!仍然存在nil(控制台中的解决方案失败)。

应用代表:

MainTabBar 控制器:

照片集合视图控制器:

0 投票
2 回答
303 浏览

ios - 我在 Swinject 中做错了什么?

每当我运行此代码时,都会调用 VCModel 的 init(),但 Swinject 不会将 VCModel 实例注入到我的 ViewController 中。有人可以告诉我我做错了什么吗?我得到的错误是:

在 ViewController viewModel.cellModels 中展开可选值时意外发现 nil

应用委托

视图控制器

0 投票
0 回答
105 浏览

ios - UIScrollView bar 插入标签栏和导航栏的大小

我正在使用 Chatto 库 ( https://github.com/badoo/Chatto ) 作为聊天窗口,并初始化从其 BaseChatViewController 继承的视图控制器。

我遇到的问题是,虽然滚动视图可以一直滚动到对话的顶部和底部,但滚动条停止的位置与顶部和选项卡上的导航栏大小相同底部的栏。

Chatto 演示应用似乎没有这个问题,所以我想知道在我的应用中是否应该做一些不同的事情。

在此处输入图像描述

这是视图控制器

0 投票
1 回答
177 浏览

ios - 当对象范围为容器时,多次调用 Swinject 工厂关闭

我正在尝试将 CoreDataStack 注册为具有对象范围的共享容器上的单个实例.container,但是它的工厂关闭被多次调用,并且当我在 Xcode 中调试内存图时,即使返回的对象不是值,也会创建该对象的多个实例-类型!

Swinject 文档:

如果工厂闭包返回值类型,则忽略对象范围,因为根据 Swift 规范,它的实例从不共享。

这种奇怪行为的根本原因是什么?

0 投票
1 回答
72 浏览

ios - 在 swinject 环境下卡住情节提要控制

嗨,我正在尝试为我的 IOS 项目应用 swinject,目前我被卡住了。

我的申请中有 2 个部分

  1. 登录部分
  2. 主要部分

场景是如果它在应用程序开始或登录成功完成时已经登录,它应该移动到主要部分,我希望他们每个人都有自己的故事板,swinject 范围分别管理实例。

登录完成后,应该新生成 MAIN 部分注入的实例,注销完成后,它应该回到 LOGIN 部​​分,并且主要部分注入的实例必须消失..

以下是我的视图控制器结构:

LOGIN 和 MAIN 视图控制器结构图

有了这个名称,我正在尝试使用下面的代码导航到 MAIN 视图,但不断出现错误。

我该怎么做才能解决这个问题?

0 投票
3 回答
152 浏览

ios - Swinject 返回 nil,因为对象注册错误

这就是我注册对象的方式FirebaseMessaging

然后我需要使用它:

但我收到一个错误:

Swinject:解析失败。预期注册:{ Service: FIRMessaging, Factory: Resolver -> FIRMessaging } 可用注册:{ Service: FIRMessaging, Factory: Resolver -> FIRMessaging, ObjectScope: graph } 致命错误:在展开可选值时意外发现 nil:文件 ToolsAssembly.swift ,第 72 行

为什么会发生?

0 投票
0 回答
123 浏览

ios - 使用依赖注入 (Swinject) 在 MVVM-C 中的 ViewModel 之间传递对象

我是新手,DependencyInjection因此Swinject我有疑问。

假设我们有一个PersonList带有Person对象列表的 ViewModel。我们选择其中一个Person并将其传递给PersonDetails它,PersonDetails(person:Person)基本上我们Person从第一个 ViewModel 中选择一个并将其传递给Person将显示详细信息的第二个 ViewModel。

正如我所了解的那样,Swinject我们将在编译时注入依赖项,例如

我的问题是我们在编译时没有信息来知道Person将选择哪种类型,PersonList所以我们如何在编译时注入正确选择Person的内容PersonDetails