程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 使用可擴展對象模式擴展HttpApplication

使用可擴展對象模式擴展HttpApplication

編輯:關於ASP.NET

概述

HttpApplication對象對於做ASP.NET開發的朋友,我想沒有人不熟悉它。在ASP.NET開發中,經常避免 不了要在HttpApplication中執行一些操作,如使用了ASP.NET MVC框架,就會在Application_Start 事件 中避免不了這樣的路由規則配置代碼:

protected void Application_Start()
{
   RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

   RouteTable.Routes.MapRoute(
     "Default",                       // Route name
     "{controller}/{action}/{id}",              // URL with parameters
     new { controller = "Home", action = "Index", id = "" } // Parameter  defaults
   );
}

如果僅僅是這一條,看起來倒不覺的有什麼問題,但如果同時在應用程序中使用了工作流,又避免不 了在Application_Start出現啟動工作流運行時的代碼:

protected void Application_Start()
{
   // 注冊路由規則
   RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
   RouteTable.Routes.MapRoute(
     "Default",                       // Route name
     "{controller}/{action}/{id}",              // URL with parameters
     new { controller = "Home", action = "Index", id = "" } // Parameter  defaults
   );

   // 啟動工作流
   WorkflowRuntime workflowRuntime = new WorkflowRuntime ("workflowServicesConfig");
   ExternalDataExchangeService externalDataExchangeService = new  ExternalDataExchangeService();
   workflowRuntime.AddService(externalDataExchangeService);
   workflowRuntime.StartRuntime();
}

試想一下,現在我們僅僅是有了ASP.NET MVC路由規則的配置、WF運行時的啟動,如果在應用程序中使 用某種DI框架,如微軟的Unity,是不是又避免不了要出現這樣的容器初始化代碼呢?

protected void Application_Start()
{
   // 注冊路由規則
   RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
   RouteTable.Routes.MapRoute(
     "Default",                       // Route name
     "{controller}/{action}/{id}",              // URL with parameters
     new { controller = "Home", action = "Index", id = "" } // Parameter  defaults
   );

   // 啟動工作流
   WorkflowRuntime workflowRuntime = new WorkflowRuntime ("workflowServicesConfig");
   ExternalDataExchangeService externalDataExchangeService = new  ExternalDataExchangeService();
   workflowRuntime.AddService(externalDataExchangeService);
   workflowRuntime.StartRuntime();

   // 初始化DI容器
   IContainerContext repositoryContainer = ContainerManager.GetContainer ("repositoryContainer");
   repositoryContainer.Initialize();
}

再看看Application_Start事件中的代碼,有ASP.NET MVC的工作,有WF的工作,也有Unity的工作,不 知道將來還會有什麼?這些原本互相之間沒有任何聯系的代碼,現在卻同時堆在了一起,當每一部分(或 者說每一個框架)變化的時候,都會涉及到Application_Start中代碼的修改,顯然違反了OCP原則。那麼 有沒有一種機制,讓這些互不相干的模塊之間互相獨立,各自發生變化時不影響對HttpApplication?此 時我們就需要對HttpApplication進行擴展,提供一個擴展點,讓其他模塊的程序附加到HttpApplication 上面。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved