带有异议的XIB中的依赖注入

Posted

技术标签:

【中文标题】带有异议的XIB中的依赖注入【英文标题】:Dependency injection in XIB with Objection 【发布时间】:2013-03-01 09:55:33 【问题描述】:

我正在尝试使用依赖注入框架“Objection”动态更改我的 xib 文件所有者。如果您不知道异议,请理解我只是想动态更改我的 xib 文件所有者。

让我举个例子。 当我启动我的应用程序时,我将“MainMenuBlue”类的分配绑定到“MainMenu”类

[self bindBlock:^(JSObjectionInjector *context) return [[MainMenuBlue alloc] init] autorelease]; toClass:[MainMenu 类]];

根据我的配置,我有时会将其绑定到“MainMenuRed”或“MainMenuYellow”等...

问题显然是我的 xib 文件所有者是“MainMenu”,所以它创建了一个“MainMenu”。 是不是很奇怪? :-) 您知道将 xib 链接到好的控制器的优雅方法吗? 无需将 MainMenu.xib 复制到 MainMenuBlue.xib、MainMenuRed.xib、MainMenuYellow.xib

我相信使用 xib 文件是不可能的,所以我必须远离界面生成器......

重要: 这只是一个例子来说明我的需要。当然在现实中我不只是改变背景颜色。

编辑: 多亏了贾斯珀布鲁斯,我才知道。实际上我创造了一个不是真正的问题。 根据我的配置,我只需要这样做:

[[MainMenuBlue alloc] initWithNibName:@"MainMenu" bundle:nil];

[[MainMenuRed alloc] initWithNibName:@"MainMenu" bundle:nil];

马丁马加基安

【问题讨论】:

【参考方案1】:

文件所有者中指定的类无关紧要,只要它响应与运行时提供的类相同的消息即可。即文件的所有者只是作为一个接口来连接你的连接。

当您进行绑定时,请务必使用 initWithNibName:bundle:

【讨论】:

碧玉蓝调 谢谢。我只需要从以下位置创建对象: [[MainMenuBlue alloc] initWithNibName:@"MainMenu" bundle:nil];在一种情况下或 [[MainMenuRed alloc] initWithNibName:@"MainMenu" bundle:nil];在另一种情况下。

以上是关于带有异议的XIB中的依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

带有依赖注入和缩小的打字稿中的角服务

web api中的依赖注入

玩法 2.5:模板中的依赖注入

如何使用带有角度依赖注入的打字稿继承

带有私有 NuGet 包的 Blazor 依赖项注入和 EF/DbContext

译 Node.js 中的依赖注入