我正在开发一个仅包含菜单栏图标的 macOS 应用程序。
我有一个 xib 文件 (MenuBarMenu.xib),其中包含菜单和将其放入菜单栏中的相应 Controller (MenuBarMenuController.swift)。
我想手动或使用 Swinject 在此 Controller 中注入(inject)依赖项。
因此,为了做到这一点,我想我可以通过 AppDelegate 以编程方式加载 xib 文件:
func applicationDidFinishLaunching(_ aNotification: Notification) {
let controller = MenuBarMenuController(nibName: "MenuBarMenu", bundle: nil)
controller.someDependency = Test()
}
但看起来 Controller 在到达 applicationDidFinishLaunching 之前已被 NSApplication 自动实例化。
我尝试过的:
- 从 info.plist 中删除了 NSMainNibFile
- 从 info.plist 中删除了 NSMainStoryboardFile
- 清除项目设置中的主界面设置
- 添加了 LSUIElement = 是
- 二手custom main.swift确保我的 AppDelegate 被调用。
如果 xib 文件存在,则在 AppDelegate 之前调用它。当我删除它时,没有运行时错误。
我的问题是:如何在此 Controller 中注入(inject)依赖项?
最佳答案
虽然我没有弄清楚如何在特定场景中注入(inject)依赖项,但我可以通过使用 Storyboard 而不是 xib 文件来解决它。 然后在 SwinjectStoryboard 的帮助下我可以进行注入(inject)。
关于swift - 在 xib Controller 中注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55648736/