是否可以在不重新编译的情况下向 Prism 应用程序添加新控件

本文关键字:情况下 Prism 控件 新控件 添加 应用程序 编译 新编译 是否 | 更新日期: 2023-09-27 18:32:59

Prism应用程序中只有一个模块。让此模块具有名称ModuleA,应用程序名称为 "CoolAppl" 。这个应用程序很酷,在生产中工作得很好。一旦有人想添加新按钮,例如"Delete Person",到这个应用程序"CoolAppl"

我的问题是我或另一个城市的人是否可以将新的按钮"Delete Person"添加到应用程序"CoolAppl"ModuleA中,而无需重新编译任何模块,只需添加带有必要按钮Delete Person的 dll?

如果可能的话,请为我提供方向,我应该在哪里挖掘/搜索:)。

我正在使用这样的导航机制

 Uri wholeView = new Uri("ModuleA", UriKind.Relative);                                
 regionManager.RequestNavigate(RegionNames.TheBottomRegion, wholeView);
 var currentView = regionManager.Regions[RegionNames.TheWholeRegion].Views.ElementAt(0);
 regionManager.Regions[RegionNames.TheWholeRegion].Remove(currentView);

用于识别模块的类如下所示:

public class ModuleAModule : ModuleBase, IModule
{
    private readonly IRegionManager _regionManager;
    private readonly IUnityContainer _container;
    public ModuleAModule(IUnityContainer container, IRegionManager regionManager)
        : base(container, regionManager)
    {
        _regionManager = regionManager;
        _container = container;
    }
    protected override void InitializeModule()
    {            
        RegionManager.RegisterViewWithRegion(RegionNames.TheWholeRegion, typeof(LoginControl));
    }
    protected override void RegisterTypes()
    {
        Container.RegisterType<IViewModel, MyViewModel>();
        Container.RegisterTypeForNavigation<MySuperControl>();            
    }
}

是否可以在不重新编译的情况下向 Prism 应用程序添加新控件

如果没有重新编译意味着"不重新编译所有内容",那么你可以重新编译 ModuleA。如果这意味着"什么都不重新编译",那么你就不走运了。如果新按钮不需要位于模块 A 中,则可以创建新的模块 B,而无需重新编译 CoolAppl 或模块 A(但您需要编译模块 B)。

不过,您可能已经放置了一个插件系统,可以从插件加载按钮,然后您可以为新按钮添加另一个插件。