天天看點

一步一步教你使用AgileEAS.NET基礎類庫進行應用開發-基礎篇-UDA應用中使用IOC解偶資料連接配接環境

         前面的三篇文章,我把AgileEAS.NET平台的UDA的應用案例從資料處理方式與流程、基礎的語句執行、查詢處理以及引入的委托處理機制、事務的兩種處理方法,基本上涵蓋了基于資料支撐的業務資訊系統所涉及的所有資料庫處理。

         前三篇文章中所涉及的例程代碼中,對于資料庫連接配接環境程式中定義了一個單例模式工的類UdaContext:

 1     /// <summary>

 2     /// 資料上下文輔助類(不用了)。

 3     /// </summary>

 4     class UdaContext2

 5     {

 6         #region 單例模型

 7 

 8         /// <summary>

 9         /// 内部私有成員,UdaContext對象的唯一執行個體。

10         /// </summary>

11         protected static UdaContext2 instance;

12         private static readonly object _lock = new object();

13 

14         /// <summary>

15         /// 初始化 UdaContext 對象執行個體。

16         /// </summary>

17         UdaContext2()

18         {

19 

20         }

21 

22         /// <summary>

23         /// ClassProvider對象的唯一執行個體。

24         /// </summary>

25         static UdaContext2 Instance

26         {

27             get

28             {

29                 if (instance == null)

30                 {

31                     lock (_lock)

32                     {

33                         if (instance == null)

34                             instance = new UdaContext2();

35                     }

36                 }

37 

38                 return instance;

39             }

40         }

41 

42         #endregion

43 

44         IDataConnection dataConnection = null;

45         IDataAccessor dataAccessor = null;

46         

47         /// <summary>

48         /// IDataConnection比IConnection更加抽像一些。

49         /// </summary>

50         /// <remarks>

51         /// IDataConnection不能支援标準方式的事務,隻支援事務代理。

52         /// </remarks>

53         public static IConnection Connection

54         {

55             get

56             {

57                 return DataConnection as IConnection;

58             }

59         }  

60 

61         public static IDataConnection DataConnection

62         {

63             get

64             {

65                 if(Instance.dataConnection==null)

66                     Instance.dataConnection = new OleDbConnection("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=;Initial Catalog=eas;Data Source=vm2003");

67 

68                 return Instance.dataConnection;

69             }

70         }

71 

72         public static IDataAccessor DataAccessor

73         {

74             get

75             {

76                 if (Instance.dataAccessor == null)

77                     Instance.dataAccessor = DataConnection.CreateDataAccessor();

78 

79                 return Instance.dataAccessor;

80             }

81         } 

82     }

         各示例方法中使用資料操作對象都是通過IDataAccessor accessor = UdaContext.DataAccessor這樣的方法事擷取資料操縱對象,遙IDataAccessor 又依附于對象IDataConnection之上,在UdaContext類中完成了資料連接配接環境的實作化:

if(Instance.dataConnection==null)

        Instance.dataConnection = new OleDbConnection("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=;Initial Catalog=eas;Data Source=vm2003");

         上迷代碼執行個體化了OleDbConnection方式的資料連接配接環境,平台中提供了OleDbConnection、SqlClientConnection、ODBCConnection連接配接,當然也實作了獨立的Oracle Connection,也就是說應用程式中存在着資料連接配接的執行個體化過程,這種方式是有一些問題的。

        現在我們來改造我們的UdaContext如下:

 2     /// 輔助類。

 4     static class UdaContext

 5     {        

 6         /// <summary>

 7         /// IDataConnection比IConnection更加抽像一些。

 8         /// </summary>

 9         /// <remarks>

10         /// IDataConnection不能支援标準方式的事務,隻支援事務代理。

11         /// </remarks>

12         public static IConnection Connection

13         {

14             get

15             {

16                 return DataConnection as IConnection;

17             }

18         }  

20         public static IDataConnection DataConnection

21         {

22             get

23             {

24                 return DataAccessor.DataConnection;

25             }

26         }

27 

28         public static IDataAccessor DataAccessor

29         {

30             get

31             {

32                 return ContextHelper.GetContext().Container.GetComponentInstance("DataAccessor") as IDataAccessor;

33             }

34         } 

35     }

         這裡面關鍵的是這一句ContextHelper.GetContext().Container.GetComponentInstance("DataAccessor") as IDataAccessor,實作從容器中取出名稱為DataAccessor的元件,并完成其他屬性與構造注入。

         接下來,我們為這個控制台程式增加一個應用程式配置檔案并寫如以下内容:

 1 <?xml version="1.0" encoding="utf-8"?>

 2 <configuration>

 3     <configSections>

 4         <section name="EAS.Objects" type="EAS.Objects.ConfigHandler,EAS.IOCContainer"/>

 5     </configSections>

 6     <EAS.Objects>

 7         <object name="DataConnection" assembly="EAS.Data" type="EAS.Data.Access.SqlClientConnection" LifestyleType="Singleton">

 8             <property name="ConnectionString" type="string" value="Data Source=vm2003;Initial Catalog=eas;User ID=sa" />

 9         </object>

10         <object name="DataAccessor" assembly="EAS.Data" type="EAS.Data.Access.SqlClientAccessor" LifestyleType="Singleton">

11             <property name="Connection" type="object" value="DataConnection" />

12         </object>

13     </EAS.Objects>

14 </configuration>

         編譯程式,運作輸出如下結果:

一步一步教你使用AgileEAS.NET基礎類庫進行應用開發-基礎篇-UDA應用中使用IOC解偶資料連接配接環境

連結

<a href="http://www.cnblogs.com/eastjade/archive/2010/09/12/1824405.html">AgileEAS.NET平台開發指南-系列目錄</a>

<a href="http://www.cnblogs.com/eastjade/archive/2010/09/09/1822530.html">AgileEAS.NET應用開發平台介紹-文章索引</a>

<a href="http://www.cnblogs.com/eastjade/archive/2010/09/19/1830812.html">一步一步教你使用AgileEAS.NET基礎類庫進行應用開發-系列目錄</a>

<a href="http://www.cnblogs.com/eastjade/archive/2010/09/15/1826870.html">AgileEAS.NET平台應用開發教程-案例計劃</a>

<a href="http://www.smarteas.net/">AgileEAS.NET官方網站</a>

<a href="http://www.agilelab.cn/">靈活軟體工程實驗室</a>

QQ群:116773358