久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Prism簡(jiǎn)介

 蝸牛之窩 2012-07-20

Prism是由微軟Patterns & Practices團(tuán)隊(duì)開發(fā)的項(xiàng)目,,目的在于幫助開發(fā)人員構(gòu)建松散耦合的、更靈活,、更易于維護(hù)并且更易于測(cè)試的WPF應(yīng)用或是Silverlight應(yīng)用以及Windows Phone 7應(yīng)用,。使用Prism可以使程序開發(fā)更趨于模塊化,整個(gè)項(xiàng)目將由多個(gè)離散的,、松耦合的模塊組成,,而各個(gè)模塊又可以又不同的開發(fā)者或團(tuán)隊(duì)進(jìn)行開發(fā)、測(cè)試和部署,。目前Prism的最新版本是Prism 4,,于2010年11月12日發(fā)布。Prism有很完整的文檔以及豐富的示例程序,。在這里我們僅針對(duì)于Silverlight程序的開發(fā),。

在下載Prism安裝包并安裝完成后,會(huì)在目標(biāo)文件夾中發(fā)現(xiàn)很多文件,。

 

image

 

推薦首先運(yùn)行RegisterPrismBinaries.bat文件,,這樣在開發(fā)基于Prism的程序時(shí)可以更方便地添加引用程序集。

 

image

 

使用Prism之前,,需要了解一些概念,,下面通過一個(gè)非常簡(jiǎn)單的小程序來了解一下Prism。

1.打開Visual Studio 2010,,新建一個(gè)Silverlight Application項(xiàng)目,,并添加對(duì)Prism的引用。再創(chuàng)建三個(gè)Silverlight類庫(kù)工程,。

image

2.在Contract工程下新建一個(gè)接口,,叫做ITextProvider。

1
2
3
4
public interface ITextProvider
{
    string GetText();
}

3.在其它的三個(gè)項(xiàng)目中都引用Contract項(xiàng)目,。

4.在PrismStarter工程下新建一個(gè)TextProvider類并實(shí)現(xiàn)ITextProvider接口,。

1
2
3
4
5
6
7
8
9
10
public class TextProvider : ITextProvider
{
    private int i = 0;
  
    public string GetText()
    {
        i++;
        return string.Format("From TextProvider [{0}]", i);
    }
}

5.刪除PrismStarter項(xiàng)目中自動(dòng)生成的MainPage.xaml,創(chuàng)建一個(gè)新的UserControl,,叫做Shell,。頁(yè)面代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<UserControl x:Class="PrismStarter.Shell"
    xmlns="
    xmlns:prism="http://www./prism"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
      
    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="100" />
            <RowDefinition Height="100" />
            <RowDefinition Height="100" />
        </Grid.RowDefinitions>
          
        <TextBlock FontSize="30" VerticalAlignment="Center" HorizontalAlignment="Center" Text="Prism Starter" />
          
        <ContentControl Grid.Row="1" HorizontalContentAlignment="Stretch" prism:RegionManager.RegionName="RegionA" />
  
        <ContentControl Grid.Row="2" HorizontalContentAlignment="Stretch" prism:RegionManager.RegionName="RegionB" />
    </Grid>
</UserControl>

6.在ModuleA工程中添加對(duì)Prism程序集的引用。并添加一個(gè)UserControl叫做ViewA,頁(yè)面代碼為:

1
2
3
<Grid x:Name="LayoutRoot" Background="White">
        <TextBlock x:Name="textModuleA" FontSize="30" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>

CodeBehind中的代碼為:

1
2
3
4
5
6
7
8
9
10
11
12
public partial class ViewA : UserControl
{
    public ViewA(ITextProvider textProvider)
    {
        InitializeComponent();
  
        this.Loaded += (s, e) =>
            {
                textModuleA.Text = string.Format("Module A {0}", textProvider.GetText());
            };
    }
}

7.在ModuleA工程中添加一個(gè)類叫做ModuleA,,并實(shí)現(xiàn)接口IModule,。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ModuleA : IModule
{
    private IRegionManager _regionManager;
  
    public ModuleA(IRegionManager regionManager)
    {
        _regionManager = regionManager;
    }
  
    public void Initialize()
    {
        _regionManager.RegisterViewWithRegion("RegionA", typeof(ViewA));
    }
}

注意這里的RegionA對(duì)應(yīng)于Shell頁(yè)面中的RegionName。

8.在ModuleB工程中重復(fù)6,、7過程,,只是將A替換為B。

9.在PrismStarter工程中添加對(duì)ModuleA和ModuleB的引用,。

10.在PrismStarter工程中添加一個(gè)PrismStarterBootstrapper類,,并繼承UnityBootstrapper。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class PrismStarterBootstrapper : UnityBootstrapper
{
    protected override DependencyObject CreateShell()
    {
        return this.Container.TryResolve<Shell>();
    }
  
    protected override void InitializeShell()
    {   //  控制頁(yè)面在初始化時(shí)顯示Shell頁(yè)面
        App.Current.RootVisual = (UIElement)this.Shell;
    }
  
    protected override void ConfigureModuleCatalog()
    {   //  注冊(cè)Module,。在實(shí)際開發(fā)中可以使用xaml做配置文件,
        //  這樣就可以將PrismStarter與ModuleA和ModuleB完全解耦,,也就不再需要引用這兩個(gè)項(xiàng)目
        Type moduleAType = typeof(ModuleA.ModuleA);
        ModuleInfo moduleA = new ModuleInfo
        {
            ModuleName = moduleAType.Name,
            ModuleType = moduleAType.AssemblyQualifiedName,
        };
  
        Type moduleBType = typeof(ModuleB.ModuleB);
        ModuleInfo moduleB = new ModuleInfo
        {
            ModuleName = moduleBType.Name,
            ModuleType = moduleBType.AssemblyQualifiedName,
        };
  
        this.ModuleCatalog.AddModule(moduleA);
        this.ModuleCatalog.AddModule(moduleB);
    }
  
    protected override void ConfigureContainer()
    {   //  注冊(cè)一下TextProvider,,這樣在通過容器請(qǐng)求ITextProvider時(shí)會(huì)返回TextProvider實(shí)例
        base.ConfigureContainer();
        this.Container.RegisterInstance<ITextProvider>(new TextProvider());
    }
}

11.最后一步,打開App.xaml.cs,,修改Application_Startup方法

1
2
3
4
5
private void Application_Startup(object sender, StartupEventArgs e)
{
    PrismStarterBootstrapper bootstrapper = new PrismStarterBootstrapper();
    bootstrapper.Run();
}

運(yùn)行程序,,結(jié)果如下:

image

下面簡(jiǎn)單介紹一下這個(gè)小例子中涉及到的一些概念。

Bootstrapper: 在程序中使用框架需要找到一個(gè)切入點(diǎn),,將框架植入進(jìn)去,,將一部分功能委托給框架來實(shí)現(xiàn)。在Silverlight中使用Prism的切入點(diǎn)就是App.xaml.cs中的Application_Startup方法,。一般來說,,這個(gè)方法中只是指定頁(yè)面最先加載的頁(yè)面,但是我們把默認(rèn)的邏輯去掉,,取而代之的是Bootstrapper(在本例中就是PrismStarterBootstrapper),。當(dāng)調(diào)用Bootstrapper.Run方法時(shí),它會(huì)完成一些準(zhǔn)備工作,,如一些配置等,。因此你會(huì)發(fā)現(xiàn),使用Prism后,,啟動(dòng)程序時(shí)會(huì)比正常啟動(dòng)要慢一些,,就是因?yàn)锽ootstrapper做了許多工作。

Container: 依賴注入容器,。在程序中使用依賴注入的好處到處都可以找的到,。在Silverlight中使用容器來管理各個(gè)組件的一個(gè)很明顯的好處就是使用單例來降低內(nèi)存使用。否則每次加載一個(gè)頁(yè)面都需要重新創(chuàng)建一個(gè)也很耗費(fèi)資源的,。當(dāng)然好處不只這些,,通過容器來注入一些服務(wù)(如本例中的IRegionManager和ITextProvider)顯得相當(dāng)方便。

Module: Prism幫助我們把程序分解成一個(gè)個(gè)功能模塊,這些功能模塊就叫做Module,,通常一個(gè)工程就是一個(gè)Module,。由于Module彼此是獨(dú)立的,但是在運(yùn)行時(shí)需要將它們整合到一起,,因此Prism需要知道Module的存在,,這里就涉及到了ModuleCatalog, ModuleCatalog就是Module的容器,里面包含了所有Module的信息,,以ModuleInfo的形式存在,。ModuleInfo就是對(duì)Module的抽象,包含Module的名字,,類型,,依賴等一些信息。

Shell: 相當(dāng)于程序的入口,,初始界面,,還能夠提供類似ASP.Net中的母版頁(yè)的功能。Shell必須由Bootstrapper創(chuàng)建,,因?yàn)镾hell需要使用的一些service,,比如RegionManager等,需要在Shell顯示前注冊(cè),。

Region: 相當(dāng)于ASP.Net中的ContentPlaceHolder(是這么叫的吧,?),起到占位符的作用,,如本例中Shell中有兩個(gè)Region——RegionA和RegionB,,定義了兩塊區(qū)域。在Module的初始化過程中,,通過IRegionManager將Module中的頁(yè)面放進(jìn)了定義好的Region中,。IRegionManager負(fù)責(zé)管理Region,可以通過它向Region中注冊(cè)View,,進(jìn)行導(dǎo)航等,。

 

Prism的功能當(dāng)然遠(yuǎn)不止這么簡(jiǎn)單,它還提供對(duì)MVVM模式的支持,,對(duì)導(dǎo)航的支持等,,在后續(xù)文章中會(huì)逐步介紹。希望能夠通過本文讓大家對(duì)Prism有一定的了解,。

 

代碼下載

標(biāo)簽: Silverlight, Prism

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多