Prism框架的Module(模块化)编程

时间:2019-09-08
本文章向大家介绍Prism框架的Module(模块化)编程,主要包括Prism框架的Module(模块化)编程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Prism框架用的是新版本的,Prism7.1。关于其中的变动,感兴趣的参考https://www.cnblogs.com/hicolin/p/8694892.html

如何告诉Shell(我们的宿主程序)去Load哪些Module,在App启动之初,需要创建配置一个ModuleCatalog(用来管理Module)。

方式一:通过配置文件(App.config)创建模块目录(ModuleCatalog)

1、新建Prism Blank App(WPF) 项目:BlankApp7

BlankApp7处鼠标右键——添加——新建项——应用程序配置文件,App.config

2、新建Prism Module(WPF)项目:ModuleA

3、ModuleA中有个ModuleAModule.cs文件,实现ViewA与主窗体的ContentRegion的关联

using ModuleA.Views;
using Prism.Ioc;
using Prism.Modularity;
using Prism.Regions;

namespace ModuleA
{
    public class ModuleAModule : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider) 
        {
            var regionManager = containerProvider.Resolve<IRegionManager>();
            regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA)); //viewA与ContentRegion进行关联
        }
        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            
        }
    }
}

App.xaml.cs目录创建于配置文件

using BlankApp7.Views;
using Prism.Ioc;
using Prism.Modularity;
using System.Windows;

namespace BlankApp7
{
    public partial class App
    {
        protected override Window CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
        }
        protected override IModuleCatalog CreateModuleCatalog() 
        {
            return new ConfigurationModuleCatalog(); //目录创建于配置文件
        }
    }
}

配置文件App.config,可知有一个名为ModuleAModule的Module,集合于ModuleA.dll中,startupLoaded是否在启动时就加载(显示)。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf" />
    </configSections>
    <modules>        
        <module assemblyFile="ModuleA.dll" moduleType="ModuleA.ModuleAModule, ModuleA" moduleName="ModuleAModule" startupLoaded="True" />
    </modules>
</configuration>

4、由于BlankApp7要加载ModuleA,所以要引用ModuleA生成的dll。

ModuleA处鼠标右键——生成,ModuleA的bin文件夹中就会出现ModuleA.dll

BlankApp7处鼠标右键——添加——引用,浏览,找到ModuleA.dll(不建议复制粘贴dll到BlankApp7的bin目录,因为如果重新生成ModuleA.dll,那么新的dll不会出现在BlankApp7的bin目录,依旧是拷贝的旧dll)

运行结果如图

原文地址:https://www.cnblogs.com/xixixing/p/11488218.html