好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

可扩展的应用程序 “启动引导” 框架

可扩展的应用程序 “启动引导” 框架

可扩展的应用程序 “启动引导” 框架

背景

应用程序引导经常要做如下这些事情:

动态加载DLL(或各种插件)。 注册IOC容器。 设置其他全局配置。

这其中尤其以注册IOC容器的代码最烦人,看一个我昨天写的烦人代码:

  1   using   System;
   2    using   System.Collections.Generic;
   3    using   System.Linq;
   4    using   System.Text;
   5    using   System.Threading.Tasks;
   6    using   System.Threading;
   7   
  8    using   Microsoft.Practices.ServiceLocation;
   9    using   Microsoft.Practices.Unity;
  10   
 11    using   Happy.Event;
  12    using   Happy.Event.Offline;
  13   
 14    namespace   Happy.Event.Demo.Simple
  15    {
  16        class   Program
  17        {
  18            static   readonly   string  _QueueName =  "  Happy.Event.Demo.Simple  "  ;
  19   
 20            static   void  Main( string  [] args)
  21            {
  22                InitUnity();
  23   
 24                var  writeQueue =  OfflineEventQueueFactory.CreateMSMQOfflineEventQueue(_QueueName);
  25                EventPublisher.Current.AddService(writeQueue);
  26   
 27               EventPublisher.Current.Publish( new   TestEvent());
  28   
 29                new  Thread(() =>
 30                {
  31                    var  readQueue =  OfflineEventQueueFactory.CreateMSMQOfflineEventQueue(_QueueName);
  32                    var  offlineEventProcessor =  new   OfflineEventProcessor(readQueue);
  33   
 34                    offlineEventProcessor.Start();
  35                })
  36                .Start();
  37   
 38                Console.ReadLine();
  39            }
  40   
 41            static   void   InitUnity()
  42            {
  43                var  container =  new   UnityContainer();
  44   
 45               ServiceLocator.SetLocatorProvider(() =>  new   UnityServiceLocator(container));
  46   
 47               container.RegisterType<ISyncEventSubscriber<TestEvent>, TestSyncEventSubscriber1>( "  TestSyncEventSubscriber1  "  );
  48               container.RegisterType<ISyncEventSubscriber<TestEvent>, TestSyncEventSubscriber2>( "  TestSyncEventSubscriber2  "  );
  49               container.RegisterType<IAsyncEventSubscriber<TestEvent>, TestAsyncEventSubscriber1>( "  TestAsyncEventSubscriber1  "  );
  50               container.RegisterType<IAsyncEventSubscriber<TestEvent>, TestAsyncEventSubscriber2>( "  TestAsyncEventSubscriber2  "  );
  51               container.RegisterType<IOfflineEventSubscriber<TestEvent>, TestOfflineEventSubscriber1>( "  TestOfflineEventSubscriber1  "  );
  52               container.RegisterType<IOfflineEventSubscriber<TestEvent>, TestOfflineEventSubscriber2>( "  TestOfflineEventSubscriber2  "  );
  53            }
  54        }
  55   }

是不是很糟糕,看着不爽。这也是我写这篇文章的目的。

新框架原理 约定胜于配置

用新框架重新昨天的配置代码

  1   using   System;
   2   using   System.Collections.Generic;
   3   using   System.Linq;
   4   using   System.Text;
   5   using   System.Threading.Tasks;
   6   using   System.Threading;
   7  
  8   using   Happy.Bootstrap;
   9   using   Happy.Event;
  10   using   Happy.Event.Offline;
  11  
 12   namespace   Happy.Event.Demo.Simple
  13   {
  14       class   Program
  15       {
  16           static   readonly   string  _QueueName =  "  Happy.Event.Demo.Simple  "  ;
  17  
 18           static   void  Main( string  [] args)
  19           {
  20               InitApp();
  21  
 22               InitOfflineEventProcessor();
  23  
 24               InitEventPublisher();
  25  
 26              EventPublisher.Current.Publish( new   TestEvent());
  27           }
  28  
 29           static   void   InitApp()
  30           {
  31               BootstrapService
  32                   .Current
  33                   .UseRegisterServiceByConventionPlug()
  34                       .UseEventSubscriberRegister()
  35                       .Done()
  36                   .Start();
  37           }
  38  
 39           private   static   void   InitEventPublisher()
  40           {
  41               var  writeQueue =  OfflineEventQueueFactory.CreateMSMQOfflineEventQueue(_QueueName);
  42               EventPublisher.Current.AddService(writeQueue);
  43           }
  44  
 45           private   static   void   InitOfflineEventProcessor()
  46           {
  47               new  Thread(() =>
 48               {
  49                   var  readQueue =  OfflineEventQueueFactory.CreateMSMQOfflineEventQueue(_QueueName);
  50                   var  offlineEventProcessor =  new   OfflineEventProcessor(readQueue);
  51  
 52                   offlineEventProcessor.Start();
  53               })
  54               .Start();
  55           }
  56       }
  57  }

这样是不是看着舒服多了。

备注

代码示例,可以直接去 http://happy.codeplex.com/SourceControl/latest 这里下载最新的源代码。

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于可扩展的应用程序 “启动引导” 框架的详细内容...

  阅读:35次

上一篇: Mac下使用Fiddler

下一篇:RadioButtonList