prism WPF 模块

模块 DLL

ModuleA 和 ModuleB 都要安装 Prism.Unity

prism WPF 模块_第1张图片

引用方式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
{
    /// 
    /// App.xaml 的交互逻辑
    /// 
    public partial class App : PrismApplication
    {
        /// 
        /// 提供主窗口的对象
        /// 
        /// 
        /// 
        protected override Window CreateShell()
        {
            //打开第一个窗口 ModuleWindow
            //return Container.Resolve();
            return Container.Resolve();
            //return new MainWindow();
        }

        /// 
        /// 业务中所有需要注入的对象,在这个方法里注册
        /// 
        /// 
        /// 
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            //注册 导航 RegisterForNavigation
            containerRegistry.RegisterForNavigation();
            containerRegistry.RegisterForNavigation();
            containerRegistry.RegisterForNavigation();
        }

        /// 
        /// 添加模块
        /// 
        /// 
        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {
            moduleCatalog.AddModule();
            moduleCatalog.AddModule();
            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目录动态注册

prism WPF 模块_第2张图片

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
{
    /// 
    /// App.xaml 的交互逻辑
    /// 
    public partial class App : PrismApplication
    {
        /// 
        /// 提供主窗口的对象
        /// 
        /// 
        /// 
        protected override Window CreateShell()
        {
            //打开第一个窗口 ModuleWindow
            //return Container.Resolve();
            return Container.Resolve();
            //return new MainWindow();
        }

        /// 
        /// 业务中所有需要注入的对象,在这个方法里注册
        /// 
        /// 
        /// 
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            //注册 导航 RegisterForNavigation
            containerRegistry.RegisterForNavigation();
            containerRegistry.RegisterForNavigation();
            containerRegistry.RegisterForNavigation();
        }

        /// 
        /// 添加模块(代码引用)
        /// 
        /// 
        //protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        //{
        //    moduleCatalog.AddModule();
        //    moduleCatalog.AddModule();
        //    base.ConfigureModuleCatalog(moduleCatalog);
        //}

        /// 
        /// 创建模块
        /// 
        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
{
    /// 
    /// 模块要实现 IModule 接口 
    /// 
    public class ModuleAProfile : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider)
        {
            
        }

        /// 
        /// 模块 服务注入
        /// 
        /// 
        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            //导航
            containerRegistry.RegisterForNavigation();
        }
    }
}

UserControl1.xaml


    
        
    

AppData

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

    /// 
    /// 主窗体
    /// 
    public MainWindow MainWindow { get; set; }
}

你可能感兴趣的:(WPF,wpf)