gpt4 book ai didi

wpf - 我如何松散地引用 Prism 中的模块,以便它们可以存在或不存在?

转载 作者:行者123 更新时间:2023-12-01 14:50:39 25 4
gpt4 key购买 nike

this stackoverflow question我了解到 Prism/Unity 并不像我想象的那样分离,例如如果我有一个将 menuManager 注入(inject)到它的构造函数中的类,那么我必须确保这个类实际上存在于某处(我认为你可以直接拉 .dll包含该类的容器将对其进行处理,例如在其位置注入(inject)一个空值):

public class EmployeesPresenter
{
public EmployeesPresenter(IMenuManager menuManager)
{

}
}

但我可以处理这个问题:没有 MenuModule 应用程序无法运行(或者如建议的那样,我可以有一个 NullMenuModule,它除了防止应用程序中断外什么都不做)。

但是,我正在构建的应用程序将在 MenuModule 中有一个 MenuManager 类,并且每个模块都必须使用 MenuManager 在菜单中注册它想要的所有内容。但是,我希望能够换出 MenuModules 例如有一个 InfragisticsMenuModule 和一个 TelerikMenuModule

但是,当我在例如CustomersModule,为了使用 TelerikMenuModule,我需要引用它。当我想使用 InfragisticsMenuModule 时,我需要引用它。

那么我如何能够“热交换”TelerikMenuModule 与 InfragisticsMenuModule 而无需使用新引用重新编译我的所有模块,例如我想替换这个:

Application.exe
Customers.dll
TelerikMenuModule.dll

用这个:

Application.exe
Customers.dll
InfragisticsMenuModule.dll

只需重新启动应用程序,它就可以使用新的 InfragisticsMenuModule.dll 运行,并且不会提示 TelerikMenuModule.dll 不再存在

最佳答案

这就是接口(interface)的用武之地。你需要这样的东西:

public interface IMenuSystem
{
// whatever operations need to be offered by a menu system
}

Application.exeCustomers.dll 可能只引用该接口(interface)。不允许他们了解特定的实现。

然后您将使用配置步骤(调用 Register... 方法或使用配置文件)来指定哪种类型将提供 MenuSystem 的实现。

关于wpf - 我如何松散地引用 Prism 中的模块,以便它们可以存在或不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1154276/

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