一步一步教你使用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和大家共同讨论,非常感谢。


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

相关文章
|
1月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
145 3
|
5天前
|
开发框架 监控 .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
|
18天前
|
安全 算法 编译器
.NET 9 AOT的突破 - 支持老旧Win7与XP环境
【10月更文挑战第30天】在.NET 9 中,AOT(Ahead-of-Time)编译技术在支持老旧的 Windows 7 和 XP 系统方面取得了显著进展。主要突破包括:性能提升(启动速度加快、执行效率提高)、部署优化(无需安装.NET 运行时、减小应用程序体积)、兼容性保障(编译策略优化、依赖项管理改进)以及安全性增强(代码保护机制)。这些改进使得应用程序在老旧系统上运行更加流畅、高效和安全。
|
18天前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
|
19天前
|
XML 安全 API
.NET 9 AOT的突破 - 支持老旧Win7与XP环境
.NET 9开始,AOT支持Win7和XP,不仅仅只支持SP1版本
.NET 9 AOT的突破 - 支持老旧Win7与XP环境
|
27天前
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
39 2
|
1月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保
|
2月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
122 6
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
38 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
58 0

热门文章

最新文章