gpt4 book ai didi

wpf - Prism 7.0 RegisterSingleton 不工作?

转载 作者:行者123 更新时间:2023-12-03 10:22:18 24 4
gpt4 key购买 nike

我正在使用 Prism 7 和 Unity 5 为我的应用程序开发菜单服务。该应用程序是 WPF、MVVM、模块化的。

主菜单是分配给区域的模块。 menuService 跟踪可用的菜单选项并实现菜单对象。 menu 模块将 menuService 注册为单例:

public void RegisterTypes(IContainerRegistry containerRegistry) {
containerRegistry.RegisterSingleton<IMenuService, MainMenuService>();
}

在 OnInitialized 中,它解析 menuService 和
注册永久菜单选择。
        IMenuService menu = containerProvider.Resolve<MainMenuService>();
menu.AddTopLevelMenu(fileMenu);
menu.AddTopLevelMenu(toolMenu);
menu.AddTopLevelMenu(helpMenu);

当其他模块被实例化时,我使用 DI 来传递 menuService 实例,以便他们可以添加任何额外的菜单选择。一切正常,除了传递给其他模块的 menuService 实例是一个新的,而不是在 MenuModule 中初始化的那个。我尝试过使用构造函数注入(inject)和注入(inject)方法。它们都产生相同的结果。

我已经验证模块正在以正确的顺序实例化。我浏览了容器注册表,并且 menuService 已注册到 ContainerControlledLifetimeManager。

我无法弄清楚我错过了什么。任何建议表示赞赏。

最佳答案

containerRegistry.RegisterSingleton<IMenuService, MainMenuService>();

寄存器 MainMenuService作为 IMenuService 的单例实现.
containerProvider.Resolve<MainMenuService>();

解析 MainMenuService 的实例.这与为IMenuService注册的实现不同,实际上根本没有注册,当然也没有注册为单例。即使您注册了 MainMenuService作为一个单例,它将是与注册实现 IMenuService 的单例不同的单例。 .

长话短说-解决 IMenuService你很好:
containerProvider.Resolve<IMenuService>();

关于wpf - Prism 7.0 RegisterSingleton 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51539589/

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