当前位置: 首页 > news >正文

prism WPF 模块

模块 DLL

ModuleA 和 ModuleB 都要安装 Prism.Unity

引用方式1 项目引用

直接 在引用中添加项目引用

App.xaml.cs 添加模块 ConfigureModuleCatalog

using ModuleA;
using ModuleB;
using Prism.Ioc;
using Prism.Modularity;
using Prism.Unity;
using PrismWpfApp.ViewModels;
using PrismWpfApp.Views;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace PrismWpfApp
{
    /// <summary>
    /// App.xaml 的交互逻辑
    /// </summary>
    public partial class App : PrismApplication
    {
        /// <summary>
        /// 提供主窗口的对象
        /// </summary>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        protected override Window CreateShell()
        {
            //打开第一个窗口 ModuleWindow
            //return Container.Resolve<MainWindow>();
            return Container.Resolve<ModuleWindow>();
            //return new MainWindow();
        }

        /// <summary>
        /// 业务中所有需要注入的对象,在这个方法里注册
        /// </summary>
        /// <param name="containerRegistry"></param>
        /// <exception cref="NotImplementedException"></exception>
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            //注册 导航 RegisterForNavigation
            containerRegistry.RegisterForNavigation<UserControlA>();
            containerRegistry.RegisterForNavigation<UserControlB>();
            containerRegistry.RegisterForNavigation<UserControlC>();
        }

        /// <summary>
        /// 添加模块
        /// </summary>
        /// <param name="moduleCatalog"></param>
        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {
            moduleCatalog.AddModule<ModuleAProfile>();
            moduleCatalog.AddModule<ModuleBProfile>();
            base.ConfigureModuleCatalog(moduleCatalog);
        }

        //protected override void OnStartup(StartupEventArgs e)
        //{
        //    base.OnStartup(e);

        //    if (new LoginWindow().ShowDialog() == true)
        //    {
        //        new MainWindow().ShowDialog();
        //    }
        //    Application.Current.Shutdown();
        //}
    }
}

引用方式2 通过Modules目录动态注册

App.xaml.cs 创建模块 CreateModuleCatalog()

using Prism.Ioc;
using Prism.Modularity;
using Prism.Unity;
using PrismWpfApp.ViewModels;
using PrismWpfApp.Views;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace PrismWpfApp
{
    /// <summary>
    /// App.xaml 的交互逻辑
    /// </summary>
    public partial class App : PrismApplication
    {
        /// <summary>
        /// 提供主窗口的对象
        /// </summary>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        protected override Window CreateShell()
        {
            //打开第一个窗口 ModuleWindow
            //return Container.Resolve<MainWindow>();
            return Container.Resolve<ModuleWindow>();
            //return new MainWindow();
        }

        /// <summary>
        /// 业务中所有需要注入的对象,在这个方法里注册
        /// </summary>
        /// <param name="containerRegistry"></param>
        /// <exception cref="NotImplementedException"></exception>
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            //注册 导航 RegisterForNavigation
            containerRegistry.RegisterForNavigation<UserControlA>();
            containerRegistry.RegisterForNavigation<UserControlB>();
            containerRegistry.RegisterForNavigation<UserControlC>();
        }

        /// <summary>
        /// 添加模块(代码引用)
        /// </summary>
        /// <param name="moduleCatalog"></param>
        //protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        //{
        //    moduleCatalog.AddModule<ModuleAProfile>();
        //    moduleCatalog.AddModule<ModuleBProfile>();
        //    base.ConfigureModuleCatalog(moduleCatalog);
        //}

        /// <summary>
        /// 创建模块
        /// </summary>
        protected override IModuleCatalog CreateModuleCatalog()
        {
            return new DirectoryModuleCatalog() { ModulePath = @".\Modules" };
        }

        //protected override void OnStartup(StartupEventArgs e)
        //{
        //    base.OnStartup(e);

        //    if (new LoginWindow().ShowDialog() == true)
        //    {
        //        new MainWindow().ShowDialog();
        //    }
        //    Application.Current.Shutdown();
        //}
    }
}

ModuleAProfile

using ModuleA.Views;
using Prism.Ioc;
using Prism.Modularity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ModuleA
{
    /// <summary>
    /// 模块要实现 IModule 接口 
    /// </summary>
    public class ModuleAProfile : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider)
        {
            
        }

        /// <summary>
        /// 模块 服务注入
        /// </summary>
        /// <param name="containerRegistry"></param>
        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            //导航
            containerRegistry.RegisterForNavigation<UserControl1>();
        }
    }
}

UserControl1.xaml

<UserControl x:Class="ModuleA.Views.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:ModuleA.Views"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid>
        <TextBlock Text="我是模块1" FontSize="50"/>
    </Grid>
</UserControl>

AppData

/// <summary>
/// UI层公共数据
/// </summary>
public class AppData : BindableBase
{
    /// <summary>
    ///  这样就可以在事个UI层获取到AppData类的所有公共属性和方法
    /// </summary>
    public static AppData Instance = new Lazy<AppData>(() => new AppData()).Value;

    /// <summary>
    /// 主窗体
    /// </summary>
    public MainWindow MainWindow { get; set; }
}

http://www.dtcms.com/a/111940.html

相关文章:

  • #SVA语法滴水穿石# (003)关于 sequence 和 property 的区别和联系
  • Mysql 中有哪些日志结构?
  • LeetCode 687 -- 二叉树
  • HTML5+CSS3+JS小实例:带滑动指示器的导航图标
  • 开源且完全没有审核限制的大型语言模型的概述
  • 电力载波单灯控制器:智能照明的关键技术
  • AQS 等待队列中的线程自旋多少次后挂起?
  • 为PXIe控制器配置NI Linux实时操作系统安装软件
  • #python项目生成exe相关了解
  • C++20新增内容
  • 前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标节流处理、throttle、限制触发频率(setTimeout、clearInterval)
  • 表结构数据的基本特征、获取、加工与使用
  • Java 状态模式 详解
  • 金融机构开源软件生命周期管理实务
  • 模组COF受损制程排查验证及改善
  • 从文本到多模态:如何将RAG扩展为支持图像+文本检索的增强生成系统?
  • 基于 docker 的 Xinference 全流程部署指南
  • shell语言替换脚本、填补整个命令行
  • 知识考量码【蓝桥】
  • leetcode-代码随想录-链表-翻转链表
  • 框架PasteForm实际开发案例,换个口味显示数据,支持echarts,只需要标记几个特性即可在管理端显示(2)
  • Python办公自动化(2)对wordpdf的操作
  • 青少年编程与数学 02-015 大学数学知识点 04课题、微积分
  • 如何判断多个点组成的3维面不是平的,如果不是平的,如何拆分成多个平面
  • 二叉树 递归
  • Linux操作系统 4.Linux实用操作
  • 《新疆建筑安全员C证》考试信息
  • ttkbootstrap 实现日期选择器, 开始和结束时间
  • OrangePi5Plus开发板不能正确识别USB 3.0 设备 (绿联HUB和Camera)
  • Flutter性能优化细节