问题标签 [typhoon]

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 投票
2 回答
3121 浏览

ios - Typhoon:Assembly 和 Storyboard 创建的 ViewControllers

我如何将 Typhoon 与 iOS 故事板一起使用,其中视图控制器由系统隐式生成?我需要在 prepareForSegue 方法中做一些特别的事情吗?

0 投票
1 回答
935 浏览

objective-c - Typhoon:如何让一个符合生产协议的实例和另一个用于测试的协议?

我在 Typhoon 中定义了一个 ApplicationAssembly。

所以我想做的是说:“这个类 X 需要注入符合 Foo 协议的东西。这是一个 RealFoo,这是一个 TestFoo。当我在现实生活中运行 X 时,我希望它得到一个 RealFoo,但是当我运行我的集成测试时,我希望它得到一个 TestFoo”。

我怎样才能做到这一点?

0 投票
1 回答
419 浏览

typhoon - Typhoon:如何修补与组件键相关的定义?

我正在尝试实现一个补丁程序,如文档和这篇 SO 帖子中所示:Typhoon: How to get an instance conforming to a protocol for production, and another for testing? .

我正在使用块组装并得到错误:

TyphoonPatcher.m: 46.

我的类实现不响应此选择器。应该是?密钥与修补过程有何关系?

AppDelegate.m

0 投票
3 回答
1141 浏览

objective-c - 台风:注入视图控制器提供程序

当使用负责创建和管理图中对象生命周期的手工容器/注入器时,我使用以下模式(我在一篇关于 ObjC 中的 DIY DI 的文章中读到):

假设我们有一个根视图控制器想要呈现另一个(我们称之为细节视图控制器)传递一些数据给它。我通常做的是注入一个提供程序块,它将数据作为参数并返回一个新的视图控制器来呈现。这是一些代码...

我也可以使用工厂类,但这样我就可以避免创建一个新类,而只是在我的容器类中创建提供程序块。

当我想使用 Typhoon 作为 DI 容器时,问题就来了。我怎样才能使用相同的模式?在我的详细视图控制器中,我正在注入其他东西,并且我想继续使用构造函数注入,并且更喜欢它是由组件工厂创建的,而不是由我创建的。我可以创建一个工厂类来创建详细 VC,在其中(工厂)注入我稍后要在详细 VC 中注入的依赖项,但与基于块的解决方案相比,它似乎工作量太大。

我不想从根视图控制器访问我的组件工厂,也不想对 someData 使用 setter 注入。

有什么解决办法吗?

0 投票
1 回答
955 浏览

typhoon - Typhoon - 如何注入在 xib 文件中定义的 UIView?

我想在我的视图控制器中注入一个视图,以便我可以在我的单元测试中注入一个模拟视图(WPDependencyInjectorImplementation是我的TyphoonAssembly子类)。

我理想loadView的方法如下所示:

鉴于从 xib 创建视图的代码如下:

0 投票
1 回答
804 浏览

ios - 用 Typhoon 注入 mock

我正在尝试使用 Typhoon 编写 XCTest 并注入模拟依赖项。

这是我的代码ViewController

这是我尝试更改注入的方式:

但是测试失败,因为无法将此工厂设置为默认值。我在AppDelegate工厂配置:

如何摆脱这种局面?

0 投票
2 回答
551 浏览

ios - 在 Typhoon 中使用非属性方法初始化对象

我尤其是 DI 和 Typhoon 的新手。我想知道是否可以使用初始化方法和属性以外的方法初始化对象。我有一个名为 ObjectMapper 的类,一个 ObjectMapper 可以有 N 个 ObjectMap。在使用台风之前,我会像这样创建地图:

ObjectMap *map1 = [ObjectMap new]; [map1 mapProperty:@"prop1" toName:@"name1"]; [map1 mapProperty:@"prop2" toName:@"name2"]; ObjectMap *map2 = [ObjectMap new]; [map2 mapProperty:@"prop3" toName:@"name3"]; mapper.maps = @[map1, map2];

在应用程序的整个生命周期中,映射和映射器对象永远不会改变。我想在 Typhoon 中创建 ObjectMapper 和 ObjectMaps。更新:似乎 TyphoonFactoryProvider 可能会有所帮助,但我不知道如何将工厂创建的对象放入“地图”数组中。

0 投票
1 回答
468 浏览

objective-c - 为什么我不能多次在 Typhoon 中设置默认工厂?

在我的单元测试中,我使用 Typoon 和 TyphoonBlockComponentFactory 对象来实例化模拟和对象等。我所有的单元测试都按顺序一次运行,并且每个测试都建立了自己的工厂,只有它需要运行的程序集。

它每次都会创建该工厂并使其成为默认工厂,因此被测试的类可以从工厂实例化它们的依赖关系。但是 TyphoonComponentFactory 的 'makeDefault' 方法被包装在一个 dispatch_once 块中,这意味着它只能在应用程序的生命周期内发生一次。

为什么?我的方法的某些部分从根本上是错误的吗?我希望能够在我的 tearDown 方法中以某种方式破坏 Typhoon 状态,但我不知道如何 - 不能破坏单例!

0 投票
2 回答
377 浏览

objective-c - 在 Typhoon 中创建对象时崩溃

尝试实例化对象时,我在 TyphoonComponentFactory.m 中遇到崩溃 - 此行因 EXC_BAD_ACCESS 而崩溃:

或者有时这个:

所有变量——池、实例、定义,在它崩溃的时候,在调试器中看起来都是正确的。在程序执行的早期(但不是更早,即相同的运行循环),我已经设置了我的 TyphoonComponentFactory 并将其设为默认工厂。有什么可能导致这种情况吗?我有一个模糊的理论,即工厂对调用者来说创建得太晚了,但是......非常弱。

台风版本 1.8.2。这是组装:

堆栈跟踪,用于第 276 行的崩溃:

相关对象的值:

self: TyphoonBlockComponentFactory,所有相关对象都在注册表中可用。定义:“定义:class='AuthenticationDetails', key='authenticationDetails'” 池:NSDictionary,0 个键/值对实例:id,未初始化的指针。

这是当时主线程的堆栈 - 还包含 Typhoon 引用:

进一步更新:

Typhoon 似乎默认为 TyphoonScopeObjectGraph,这显然不是线程安全的。我们将所有非单例切换到 TyphoonScopePrototype,现在我们在 TyphoonCallStack -pop 中遇到崩溃,在第 59 行,[_storage removeLastObject]. 似乎是某种例外,但调试器并没有吐出任何有用的东西。

0 投票
2 回答
161 浏览

ios - 使用 Typhoon 框架在我的项目中未调用 CLLocationManager 委托

我在我的应用程序中使用了台风框架。我的应用程序运行良好。现在我想在我的应用中定位更新。我添加了 Location 框架并实现了代码。但是我的 CLLocationManger 委托方法不起作用。

我在演示应用程序中复制了相同的代码,女巫没有任何依赖关系,并且相同的代码开始工作,我能够获取位置更新。

有谁可以告诉我这种行为的可能原因是什么。

这是我正在使用的代码:

在我的 LoginViewController.mi 中,我在 - (void)viewDidLoad 方法中使用了以下代码