gpt4 book ai didi

objective-c - 台风:注入(inject) View Controller 提供程序

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:38 27 4
gpt4 key购买 nike

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

假设我们有一个 Root View Controller 想要呈现另一个(我们称它为细节 View Controller )传递一些数据给它。我通常做的是注入(inject)一个提供程序 block ,它将数据作为参数并返回一个新的 View Controller 来呈现。这是一些代码...

@implementation RootViewController
{
UIViewController (^detailViewControllerProvider)(SomeData *someData);
}

- (id) initWithDetailViewControllerProvider:(UIViewController (^)(SomeData *someData))detailViewControllerProvider
{
//...
_detailViewControllerProvider = detailViewControllerProvider;
//...
}

// ...

- (void) presentDetailViewControllerWithData:(SomeData *)someData
{
UIViewController *detailViewController = _detailViewControllerProvider(someData);
[self presentViewController:detailViewController animated:YES completion:nil];
}

@end

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

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

我不想从 Root View Controller 访问我的组件工厂,也不想对某些数据使用 setter 注入(inject)。

有什么解决办法吗?

最佳答案

我会和工厂一起去。
这似乎有点开销,但如果你使用 TDD,它将大大简化你的生活,因为你可以轻松地模拟工厂并单独测试你的 Controller 。
它也适用于台风。

关于objective-c - 台风:注入(inject) View Controller 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20405636/

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