Bootstrapper類,在Prism框架中的啟動器類。它的職責是初始化並啟動系統。在我所重構的計算器項目中,它的工作就是完成Application項目中Program類里的Main方法的實現部分。既然Prism框架為了我們提供了一個這樣的神器,那我還何必要舍近求遠的自己實現呢?
今天這一章將是重構計算器部分的最后一章。之后,我將繼續深入的學習如何在Silverlight項目中應用Prism框架。
先看看Unity中的Bootstrapper類吧。在Unity中有一個繼承致Bootstrapper類的抽象類,它的類名叫 UnityBootstrapper。之前說過,在Prism框架中,有兩種IOC框架:Unity和MEF。在MEF中繼承繼Bootstrapper的類叫MEFBootstrapper。以后有機會再去好好的學一下,也好做一個對比,便於在今后的項目中選擇。回到UnityBootstrapper上來,這個類也是一個抽象類,不能直接使用。不過,它用起來還是比較簡單和方便的。看看在這個項目中該如何使用:
Main函數中原來的方法:
1 static void Main(string[] args)
2 {
3 UnityContainer Container = new UnityContainer();
4
5 Container.RegisterInstance<IServiceLocator>(
6 new UnityServiceLocatorAdapter(Container));
7
8 Container.RegisterType<IModuleInitializer, ModuleInitializer>();
9
10 ILoggerFacade logger = new TextLogger();
11 Container.RegisterInstance<ILoggerFacade>(logger);
12
13 Container.RegisterType<IModuleCatalog, ConfigurationModuleCatalog>();
14
15 Container.RegisterType<IModuleManager, ModuleManager>();
16
17 IModuleManager Manager = Container.Resolve<IModuleManager>();
18 Manager.Run();
19 }
上面的代碼看起來有點雜。不過沒有關系,我們可以自己定義一個UnityBootstrapper類。把這些雜亂的事情交給它去完成。
下面的類,定義在Application項目中,如下:
1 public class CalculatorUnityBootstrapper: UnityBootstrapper
2 {
3 protected override IModuleCatalog CreateModuleCatalog()
4 {
5 return (new ConfigurationModuleCatalog());
6 }
7
8 protected override System.Windows.DependencyObject CreateShell()
9 {
10 return null;
11 }
12 }
因為,我的計算器是基於命令提示符的。所以,不需要新建Shell。關於Shell的概念,我將在后面詳細說明。而重寫CreateModuleCatalog方法,是為了讓UnityBootstrapper啟動后,使用ConfigurationModuleCatalog去讀取配置文件中的信息,並加載程序集。之后的章節中,再深入研究。 啟動器定義好了,讓我們看看,它為我們省下了多少事吧。 上代碼:
1 static void Main(string[] args)
2 {
3 CalculatorUnityBootstrapper boot = new CalculatorUnityBootstrapper();
4 boot.Run();
5 }
沒有錯,就是這么簡單,不需要做其它任何的改動。在運行的時候,甚至還可以看到調試信息。
今天的改動量比較小,就不傳代碼了。計算器的重構,到此就完了。在此以解決方案的程序集關系圖和類關系圖結束此部分。明天繼續深入學習Prism框架在Silverlight中的應用。
程序集關系圖:
類的關系圖: