【发布时间】:2023-03-31 00:14:01
【问题描述】:
我的应用程序需要能够存储来自登录模块的连接字符串,以供应用程序中的所有其他模块使用,其中大约有 50 个。我最初打算通过广播和订阅新的/更改的连接字符串事件来使连接字符串可用,但是由于 50 个模块中的大多数/全部是按需加载的,因此它们在登录过程中无法订阅该事件,因为它们是登录过程后加载。根据我的理解,我需要一种不同的方法来使连接字符串可用。
然后我考虑将连接字符串放在 shell 中并尝试将其公开给任何已加载的模块,但我找不到在不破坏 MVVM 模式和引入不需要的依赖项的情况下做到这一点的方法。
如果有人知道实现上述两个选项中的任何一个的方法,我很想知道它是否可以在遵循 MVVM 模式的同时完成。
我现在在想,最好的方法是将连接字符串的单例变体用作共享服务。我希望 Unity Container 能够存储连接字符串,并且我可以使用服务定位器在任何模块中访问它,但我不知道该怎么做。 MEF 和/或 Silverlight 中有任何性质相似的示例。 有没有人在 WPF 中做过这个,或者有一个如何编写连接字符串单例并将其添加到 Unity 容器的示例?指南、教程或一些代码 sn-ps 将不胜感激!
注意:我在后端使用 Prism 和 Unity、Oracle,应用程序将部署在 Citrix 服务器上(以安全的名义,他们阻止开发人员写入应用程序。 config) 这就是为什么我不能使用这种方法的原因。 当多个用户从 Citrix 运行应用程序时,使用 Singleton 作为连接字符串也会导致问题吗?每个用户都有自己的单例连接字符串吗?如果没有,那么我的整个问题就会改变,有没有一种好方法可以用来在我的所有模块之间传递/保持连接字符串?
【问题讨论】:
-
有几种方法,但要看事件的先后顺序如何。你的依赖模块是和登录模块同时加载的,还是先加载登录模块,然后登录完成后再加载其他模块?
-
@Backlash 登录完成后加载依赖模块。首先是登录模块,然后是菜单模块,然后是任意数量的模块,具体取决于菜单选择。
-
如果你采取这条路线,它开始变得有点“健谈”,但一种选择是让模块在加载时发送连接字符串的请求,然后登录模块将回复
标签: .net wpf mvvm connection-string unity-container