在这个 stackoverflow 问题中,我了解到Prism/Unity 并不像我想象的那样解耦,例如,如果我有一个将 menuManager 注入其构造函数的类,那么我必须确保这个类确实存在于某个地方(我认为你可以只需拉出包含类的 .dll,容器就会处理它,例如在其位置注入 null):
public class EmployeesPresenter
{
public EmployeesPresenter(IMenuManager menuManager)
{
}
}
但我可以解决这个问题:如果没有 MenuModule,应用程序就无法运行(或者,正如建议的那样,我可以拥有一个NullMenuModule,它什么都不做,只是防止应用程序崩溃)。
但是,我正在构建的应用程序将在 MenuModule 中有一个MenuManager 类,并且每个模块都必须使用 MenuManager 注册它想要在菜单中拥有的所有内容。但是,我希望能够换掉 MenuModules例如有一个InfragisticsMenuModule并有一个TelerikMenuModule等。
但是,当我在客户模块中时,为了使用 TelerikMenuModule,我需要引用它。当我想使用 InfragisticsMenuModule 时,我需要参考它。
那么我如何能够在不使用新引用重新编译所有模块的情况下使用 InfragisticsMenuModule “热交换” TelerikMenuModule,例如,我想替换它:
Application.exe
Customers.dll
TelerikMenuModule.dll
有了这个:
Application.exe
Customers.dll
InfragisticsMenuModule.dll
并且只需重新启动应用程序,它就会使用新的 InfragisticsMenuModule.dll 运行,并且不会抱怨 TelerikMenuModule.dll 不再存在。