模塊 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){//注冊 導航 RegisterForNavigationcontainerRegistry.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){//注冊 導航 RegisterForNavigationcontainerRegistry.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; }
}