swift - 在 xib Controller 中注入(inject)依赖项

标签 swift macos cocoa swinject

我正在开发一个仅包含菜单栏图标的 macOS 应用程序。

我有一个 xib 文件 (MenuBarMenu.xib),其中包含菜单和将其放入菜单栏中的相应 Controller (MenuBarMenuController.swift)。

enter image description here

我想手动或使用 Swinject 在此 Controller 中注入(inject)依赖项。

因此,为了做到这一点,我想我可以通过 AppDelegate 以编程方式加载 xib 文件:

 func applicationDidFinishLaunching(_ aNotification: Notification) {
        let controller = MenuBarMenuController(nibName: "MenuBarMenu", bundle: nil)
        controller.someDependency = Test()
 }

但看起来 Controller 在到达 applicationDidFinishLaunching 之前已被 NSApplication 自动实例化。

我尝试过的:

  1. 从 info.plist 中删除了 NSMainNibFile
  2. 从 info.plist 中删除了 NSMainStoryboardFile
  3. 清除项目设置中的主界面设置
  4. 添加了 LSUIElement = 是
  5. 二手custom main.swift确保我的 AppDelegate 被调用。

如果 xib 文件存在,则在 AppDelegate 之前调用它。当我删除它时,没有运行时错误。

我的问题是:如何在此 Controller 中注入(inject)依赖项?

最佳答案

虽然我没有弄清楚如何在特定场景中注入(inject)依赖项,但我可以通过使用 Storyboard 而不是 xib 文件来解决它。 然后在 SwinjectStoryboard 的帮助下我可以进行注入(inject)。

关于swift - 在 xib Controller 中注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55648736/

相关文章:

objective-c - Objective C 中的对象分配和初始化

objective-c - Objective-C 中 @property 声明中的 "getter"关键字?

swift - 在本地以不同格式保存 NSI​​mage

Swift:使 UIView 的轮廓看起来像草图

iphone - 在辅助线程中运行 Cocoa block

macos - 如何从 Hammerspoon 或 Karabiner 调用 kill 和 yank 函数

swift - 如何在 swift 中对不同字典中同一键的多个值求和?

ios - 更改选取器 View 内的字体颜色

java - jvisualvm 去哪儿了?

objective-c - 填充 NSTableView 后禁用自动选择行