一个简单的prism mef例子
首先看一下根据个人理解画的一个工作原理图
一、首先看一下我这个简单的项目结构
二、下面来详细贴出代码,最重要的是Bootstrapper类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Practices.Prism;
using Microsoft.Practices.Prism.MefExtensions;
using Microsoft.Practices.Prism.Modularity;
using System.Windows;
using System.ComponentModel.Composition.Hosting;
using microPrismModule;
namespace microPrismTest
{
public class Bootstrapper : MefBootstrapper
{
protected override System.Windows.DependencyObject CreateShell()
{
return new Shell();
}
protected override void InitializeShell()
{
base.InitializeShell();
Application.Current.MainWindow = (Shell)this.Shell;
Application.Current.MainWindow.Show();
}
protected override IModuleCatalog CreateModuleCatalog()
{
return new ConfigurationModuleCatalog();
}
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
//ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
//moduleCatalog.AddModule(typeof(microPrismModule.testModule));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Bootstrapper).Assembly));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(testModule).Assembly)); //testModule就是另一个项目中的类,该类用于加载相应的view,这样就把两个项目里面不同的模块连在了一起
}
}
}
该类主要重载了一些积累的主要虚方法
改wpf的启动方式App.xaml.cs下面,通过以下方式启动
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using Microsoft.Practices.Prism;
namespace microPrismTest
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Bootstrapper bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
}
}
三、看看module项目下面的主要方法
testModule类的全部代码注意相应的名称空间一定要引入
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Practices.Prism.Commands;
using Microsoft.Practices.Prism.MefExtensions.Modularity;
using Microsoft.Practices.Prism.Modularity;
using Microsoft.Practices.Prism.Regions;
using Microsoft.Practices.ServiceLocation;
using System.ComponentModel.Composition;
namespace microPrismModule
{
[ModuleExport("microPrismModule.testModule", typeof(testModule))]
public class testModule : IModule
{
private readonly IRegionManager regionManger;
//private readonly IRegionViewRegistry regionViewRegistry;
[ImportingConstructor]
public testModule(IRegionManager regionManager)
{
this.regionManger = regionManager;
}
public void Initialize()
{
//regionViewRegistry.RegisterViewWithRegion("MainRegion", typeof(microPrismModule.usercontrol));
regionManger.AddToRegion("MainRegion", new usercontrolView()); //改句把相应的view加载进来
}
}
}
整个过程就是这样,很适合初学者。
ps:完整的源码实例请到下面地址获取
https://files.cnblogs.com/files/tianmochou/microPrismTest.zip