WPF Prism(二)Module

WPF Prsim(一)Region
WPF Prism(二)Module
WPF Prism(三)ViewModelLocator
WPF Prism(四)MVVM
WPF Prism(五)Navigation
WPF Prism(六)Dialog

一、什么是模块(Module)

本质上来说,对于一个应用程序而言,特定功能的所有View、Logic、Service等都可以独立存在。那么我们称每一个独立的功能我们都可以称之为模块。

通常情况下,我们在一个项目当中的结构是这样的:

在这里插入图片描述

所有的模块都在一个项目中,这使得应用程序当中,我们难以区分单独的模块,它们似乎变成了一个整体。所以,当我们开始考虑划分模块之间的关系的时候,并且采用新的模块化解决方案,它的结构将变成如下:

在这里插入图片描述

该项目包含了一个启动页,并且在启动页当中,我们划分好了对应的区域。这个时候,我们便可以灵活的配置我们的应用程序功能。使用Prism提供的强大功能,我们可以动态的加载应用程序模块,为指定的Region动态分配内容。

二、创建模块

2.1如果安装了VS插件,则可以直接在Module,它是一个类库。创建好之后是这样的:

在这里插入图片描述
在这里插入图片描述

2.2查看HeaderModule文件

    public class HeaderModule : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider)
        {

        }

        public void RegisterTypes(IContainerRegistry containerRegistry)
        {

        }
    }

HeaderModule类继承自IModule接口,该接口提供了两个方法,分别用于注册和解析对象使用。

2.3实现接口

public class HeaderModule : IModule
{
    public void OnInitialized(IContainerProvider containerProvider)
    {
        //View Discovery
        var regionManager = containerProvider.Resolve<IRegionManager>();
        regionManager.RegisterViewWithRegion("HeaderRegion", typeof(HeaderView));
    }

    public void RegisterTypes(IContainerRegistry containerRegistry)
    {

    }
}

我们在OnInitialized方法中把View层装载到了Region中。关于视图的装载相关问题可以看这里

2.4在启动项目中添加模块

首先在启动项目添加对HeaderModule项目的引用。然后在App类中重写添加模块函数。

        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {
            base.ConfigureModuleCatalog(moduleCatalog);

            moduleCatalog.AddModule<HeaderModule>();
        }

上面的示例是直接在App类中重写方法添加模块,但其实还有其他很多办法。

2.4.1配置文件

首先需要修改App.config配置文件,如果项目中没有需要添加一个。(也需要引用Module项目)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf"/>
  </configSections>
  <modules>
    <module assemblyFile="HeaderModule.dll" moduleType="Header.HeaderModule, HeaderModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="HeaderModule" startupLoaded="True" />
  </modules>
</configuration>

在这里插入图片描述

然后需要重写CreateModuleCatalog()方法:

    protected override IModuleCatalog CreateModuleCatalog()
    {
        return new ConfigurationModuleCatalog();
    }

2.4.2Directory

通过读取根目录Modules文件夹查找模块。

        protected override IModuleCatalog CreateModuleCatalog()
        {
            return new DirectoryModuleCatalog() { ModulePath=@".\Modules" };
        }

就举例这么多,使用哪一种方式因人而异。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值