在xib控制器中注入依赖项

时间:2019-04-12 09:38:52

标签: swift macos cocoa swinject

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

我有一个带有菜单的xib文件(MenuBarMenu.xib),以及一个将其放在菜单栏中的相应控制器(MenuBarMenuController.swift)。

enter image description here

我想手动或通过Swinject在此控制器中注入依赖项。

因此,我认为我可以通过编程方式从AppDelegate加载xib文件:

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

但是看起来控制器在到达applicationDidFinishLaunching之前已被NSApplication自动实例化。

我尝试过的事情:

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

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

我的问题是:如何在此控制器中注入依赖项?

1 个答案:

答案 0 :(得分:0)

虽然我没有弄清楚如何在特定情况下注入依赖关系,但是我可以通过使用故事板而不是xib文件来解决该依赖关系。 然后借助SwinjectStoryboard我可以进行注射。