一步一步教你使用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,也就是说应用程序中存在着数据连接的实例化过程,这种方式是有一些问题的。

使用IOC进行解偶

        既然我们发现了问题,那我们就来解决问题吧,如何解决呢,解决的方案有很多,可以通过抽像工厂模式或者使用其他的N种方式,我就不一一来说了,我推荐使用AgileEAS.NET平台的控制反转(IOC)组件来完成这部分解决,有关AgileEAS.NET平台IOC组件的介绍请参见AgileEAS.NET平台之对象控制反转一文。

        现在我们来改造我们的UdaContext如下:

复制代码
 1       ///   <summary>
 2       ///  辅助类。
 3       ///   </summary>
 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          }  
19 
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 >
复制代码

 

 

         编译程序,运行输出如下结果:

image         到此为止,有关于AgileEAS.NET平台中的统一数据访问(UDA)组件的案例 示例到此结束,接下来我们开始ORM组件的案案讲解。

         有关本例子所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总   体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本文代码下载:UDA.Demo4.rar

链接

AgileEAS.NET平台开发指南-系列目录

AgileEAS.NET应用开发平台介绍-文章索引

一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录

AgileEAS.NET平台应用开发教程-案例计划

AgileEAS.NET官方网站

敏捷软件工程实验室

QQ群:116773358


作者:魏琼东 
出处:http://www.cnblogs.com/eastjade
关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教! 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com 联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。


    本文转自魏琼东博客园博客,原文链接:,如需转载请自行联系原作者

相关文章
|
2月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
255 3
|
23天前
|
数据库 C# 开发者
ADO.NET连接到南大通用GBase 8s数据库
ADO.NET连接到南大通用GBase 8s数据库
|
29天前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
34 3
|
1月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
22天前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
22天前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。
|
1月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
|
2月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
48 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
75 0