问题标签 [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 投票
1 回答
567 浏览

ios - Swinject:使用弱范围会泄漏对象

我在我的 swift 项目中使用 Swinject 进行 DI。我认为使用弱对象范围会导致泄漏。

我有这个虚拟对象

注册如下(我正在使用程序集)

出于测试目的,我在我的应用委托中添加了一个属性

并在 applicationDidFinishLaunchingWithOptions 我解析对象然后忘记它

DevTest 实例现在应该消失了吗?因为不是。它仍然在调试内存图中显示为泄漏。 看截图

我想这不是预期的行为?我错过了什么吗?对我来说,它看起来像一个错误,它弄乱了我的整个设置。我们能做些什么呢? GitHub问题

0 投票
2 回答
1075 浏览

ios - Swinject 将 self 的属性注入新的 UIViewController

假设我们有一个UITableViewControllerthat ondidSelectRowAtSection加载一个名为 ie: 的类的实例,ClassToInject并且它想通过属性注入来注入它,因为我们ViewControllerToBePushed有一个 , 的属性ClassToInject,随后(因为它是一个UITabBarViewController)在didSet回调中搜索它的所有viewControllers属性符合ClassToInjectPresentable简单的:

到现在为止,我只会做这样的事情:

而在SomeTabBarViewController...

并且所有内容都应该轻松加载(但事实并非如此)。我读过Swinject这可能会解决它。我已经看到很多注册的例子,比如:

但我不知道我是否可以注册一些加载的属性self

0 投票
0 回答
197 浏览

ios - Swinject 在一个简单的项目中给出 EXC_BAD_ACCESS 代码 = 2。如果使用 Xcode 9 beta 编译,则可以工作

我有一个最小的工作项目,如果用 Xcode 8.3.3 编译它会给我 EXC_BAD_ACCESS。该项目是一个简单的 VIPER 模块实现。Swinject 被用于创建模块本身以及所有依赖项。

我如何解决问题(或认为我解决了):

  1. 通过删除 SwinjectBug 目录的引用并重新添加解决了几天前的问题。但是,这不再起作用了。

什么仍然解决了这个问题:

  1. 使用相同的 iPhone 型号和 iOS 版本在 Xcode 9-beta 中编译和运行可以完美运行。[这个观察可能是错误的。一直不工作]
  2. 如果我强制 cast output as! SplashScreenPresenter,代码可以正常工作。

可能的场景:

  1. Xcode 8.3.3 中存在一个错误,在 Xcode 9 中已解决但如果上述情况属实,则其他模块应该失败但事实并非如此。
  2. 我使用 Swinject 的方式有问题。

您可以编译并运行该项目。

我在用:

  1. iPhone 6s 64GB 上的 iOS 10.3.1
  2. Xcode 8.3.3

EXC_BAD_ACCESS 发生在 SplashViewController 中,在输出时调用 viewIsReady

0 投票
1 回答
88 浏览

cocoapods - 使用特定分支时如何满足cocoapod外部依赖

在我的项目中,我同时使用了 Swinject 和 SwinjectAutoregistration pod。两者通常都被声明为“2.0.0”版本,如下所示: pod 'Swinject', '2.0.0' pod 'SwinjectAutoregistration', '2.0.0'

但是为了在 Xcode 9 的 beta 版本中构建我的项目,我需要采用 Swinject github repo 的特定分支,如此处所述。新声明如下所示:

pod 'Swinject', :git => 'https://github.com/Swinject/Swinject.git', :branch => 'swift4'

当我尝试时pod update,我有依赖项错误。我相信 SwinjectAutoregistration 声明了对 Swinject 2.0 的依赖,因此我对同一个 pod 有不同的来源。

有没有办法告诉 cocoapods 这个特定的 pod 来源就像2.0 版本?

0 投票
1 回答
344 浏览

swift - Swinject:使用元类型列表解析

我正在尝试创建一个函数来返回一个元类型数组,然后我可以使用它来解析来自 Swinject 的实例Resolver。这是我的代码:

我不知道如何解决这个问题。我是否需要在该getTypes()方法中以某种方式使用泛型?我需要type.self在解决时调用一些等价物吗?

我的要求是我可以定义一个[ConcreteTaskA.self, ConcreteTaskB.self]由解析器解析的元类型 ( ) 列表。

0 投票
1 回答
1793 浏览

ios - 如何使用 swinject 正确注入依赖项

我正在尝试使用 Swinject 注入依赖项,但我不知道我做错了什么。

我有处理注册用户的协议。

和一个符合这个协议的类使所有的逻辑:

因此,在 AppDelegate 中我们注册了容器,它看起来像:

但在 CreateAccountVC authService 中为空。有什么想法我该怎么做?CreateAccountVC 是 ViewController 的子类,我已经通过属性和构造函数尝试过它,但它一直为零。

0 投票
1 回答
187 浏览

ios - 如何从两个不同的 IOC 容器解析 Singleton 实例

我是 IOC 的新手,我正在构建一个应用程序,我们正在使用 IOC 容器,同时讨论我们决定一个架构,每个模块将有两个程序集,一个用于所有模块级工作,不暴露在该模块之外,一个具有公共访问权限我们想要在外面公开的功能。

我的问题是我需要创建两个 IOC 容器,一个在 APP 级别,一个在模块级别,并且有一个我想向两者注册的单例实例,但是当我解决它们时,两个级别上都创建了类的两个实例一种只获取一个实例的方法。

一种方法是创建一个 Singleton 类并禁止生成另一个实例,但我认为会删除 IOC 的概念,是否有任何其他方法可以解决两个 IOC 容器之间的单例实例。

谢谢

0 投票
1 回答
904 浏览

ios - 使用 Swinject 在对象之间共享对象实例

我开始Swinject在我的应用程序中使用,我想在presenters(Viper/MVP) 或viewControllers(Not Viper) 之间共享我的 rootNavigator 实例。我遇到的主要问题是我想共享appRootNavigatorpresenters但我失去了 的实例,window因为当我注册一个新模块时swinject会生成该类的新实例 ( AppRootNavigator)。我如何AppRootNavigatorpresenters.

在这部分代码中,我尝试更改 的navigatorpresenter但它从未进入 if。

我不知道另一种方法可以做到这一点。

这是rootNavigator

在这里我注册了我想要使用的所有元素。

0 投票
1 回答
399 浏览

swift - SwinjectStoryboard 容器解析不同的对象(实例)

我试过 Swinject(SwinjectStoryboard) 并遇到了问题。请帮我。

添加依赖项后,我在 FirstViewController 和 SecondViewController 中有 SomeClass 的不同对象(实例)。

先感谢您!

0 投票
1 回答
825 浏览

swift - 使用带有容器的组件值得吗?

我正在使用 Swinject 进行依赖注入。我创建了一个具有容器共享实例的 DependencyManager。

}

LoginFactory 类实现Assembly

}

我阅读了大会文档,其中说它更适合用于组织 - https://github.com/Swinject/Swinject/blob/master/Documentation/Assembler.md。如果我没有使用 Assembly,那么我会使用类似的命令

两种实现都按预期工作,没有任何崩溃。我想知道为什么组装甚至是一个优势?我正在做同样的事情而不使用 Assembly 而没有开销。