• 【最佳实践】【Prism】使用mef的wpf/silverlight例子


    一个基本的例子,没有viewmodel,没有使用Behaviors

    大体步骤:

    1、创建应用程序

    2、使用"Shell"替换"MainWindow"(silverlight替换MainPage)

    3、创建Bootstrapper(引导程序)

    4、创建模块

    5、加入视图

       

    ========================================

       

    1、创建程序

    使用vs 2010创建wpf或silverlight应用程序,添加以下引用

    Microsoft.Practices.Prism

    Microsoft.Practices.Prism.MefExtensions

    System.ComponentModel.Composition

    2、修改MainWindow.cs或MainPage.cs为Shell.cs,在代码视图中,右键点MainWindow或MainPage选择重构--〉重命名,命名为Shell

    修改App.xaml

    wpf程序去掉starturi属性

    修改App.xaml.cs

    Startup事件中

    private void Application_Startup(object sender, StartupEventArgs e)

    {

    Bootstrapper bootstrapper = new Bootstrapper();

    bootstrapper.Run();

    }

    导出Shell

    [Export]

    public partial class Shell : Window

    {

    public Shell()

    {

    InitializeComponent();

    }

    }

       

    3、创建Bootstrapper

    添加Bootstrapper类,注意wpf/silverlight在InitializeShell中的区别

       

    using Microsoft.Practices.Prism.MefExtensions;

    using System.ComponentModel.Composition.Hosting;

    using System.IO;

       

    namespace WpfApplication

    {

    class Bootstrapper : MefBootstrapper

    {

    protected override System.Windows.DependencyObject CreateShell()

    {

    return this.Container.GetExportedValue<Shell>();

    }

       

    protected override void InitializeShell()

    {

    base.InitializeShell();

       

    #if SILVERLIGHT

    App.Current.RootVisual = (Shell)this.Shell;

    #else

    App.Current.MainWindow = (Shell)this.Shell;

    App.Current.MainWindow.Show();

    #endif

    }

       

    protected override void ConfigureAggregateCatalog()

    {

    base.ConfigureAggregateCatalog();

       

    //加载自身

    this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(this.GetType().Assembly));

       

    //加载目录

    if (Directory.Exists("./Modules"))

    {

    this.AggregateCatalog.Catalogs.Add(new DirectoryCatalog("./Modules"));

    }

    }

    }

    }

       

    4、创建模块,

    加入以下引用

    Microsoft.Practices.Prism

    Microsoft.Practices.Prism.MefExtensions

    System.ComponentModel.Composition

       

    加入模块初始化用的类如:MarketModule,实现Initialize

    [ModuleExport(typeof(MarketModule))]

    public class MarketModule: IModule

    {

    [Import]

    public IRegionManager TheRegionManager { private get; set; }

       

    public void Initialize()

    {

    TheRegionManager.RegisterViewWithRegion("MarketRegion", typeof(MarketView));

    }

    }

    5、加入视图,并导出

    [Export(typeof(MarketView))]

    public partial class MarketView : UserControl

    {

    public MarketView()

    {

    InitializeComponent();

    }

    }

    6、修改Shell.xaml,

    加入prism命名空间

    xmlns:prism="http://www.codeplex.com/prism"

    Grid中加入

    <ItemsControl prism:RegionManager.RegionName="MarketRegion"/>

    7、应用程序中创建文件夹Modules

    在Modules文件中,加入现有项(以链接方式)"模块名称.dll" 如Modules.Market.dll

    模块名称.dll,复制到目录属性选择"始终复制"或"如果较新则复制"

       

    到此完成

  • 相关阅读:
    PowerShell美化
    Open Live Writer
    Docker学习笔记
    [Caliburn.Micro专题][1]快速入门
    Git
    自助报表是什么东西?能不能利用自助报表把报表事务推给业务人员?
    什么是报表工具?和 EXCEL 有什么区别?
    报表为什么会没完没了?怎么解决这个问题?
    How Python Handles Big Files
    完成一个预测建模项目一般需要多长时间?
  • 原文地址:https://www.cnblogs.com/ningth/p/2275133.html
Copyright © 2020-2023  润新知