一个简单的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

posted @ 2016-04-19 19:25  beautifulday  阅读(600)  评论(0编辑  收藏  举报