wpf - Prism 7.0 RegisterSingleton 不工作?
问题描述
我正在使用 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 中初始化的那个。我尝试过使用构造函数注入和注入方法。它们都产生相同的结果。
我已经验证模块正在以正确的顺序实例化。我浏览了容器注册表,并且 menuService 已注册到 ContainerControlledLifetimeManager。
我无法弄清楚我错过了什么。任何建议表示赞赏。
解决方案
containerRegistry.RegisterSingleton<IMenuService, MainMenuService>();
注册MainMenuService
为IMenuService
.
containerProvider.Resolve<MainMenuService>();
解析MainMenuService
. 这与为 IMenuService 注册的实现不同,实际上根本没有注册,当然也没有注册为单例。即使您注册MainMenuService
为单例,它也将是与注册为实施的单例不同的单例IMenuService
。
长话短说 - 解决IMenuService
,你很好:
containerProvider.Resolve<IMenuService>();
推荐阅读
- python - 运行 linux 可执行文件时出错使 bu pyinstaller
- c# - Microsoft Bot C# SDK 在使用自适应卡片附件的 WaterfallStepContext 期间从卡片提交操作中获取错误
- python - Doc2Vec __init__() 有一个意外的关键字参数“大小”
- javascript - ReactJS 登录页面在每个 url 路径上重复
- c++ - wxTextCtrl 调整大小问题
- javascript - 如何添加基于 Nextjs cookie 的安全身份验证?
- java - Quarkus 1.12.1.Final 在 Swagger 上激活模式验证
- javascript - Anime.js - 如何从多个按钮调用动画(同一类)
- authentication - Auth0 嵌入式登录流程
- webgl - webpack-dev-server 在新机器上加载速度极慢