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


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

相关文章
|
8月前
|
网络协议 定位技术 网络安全
IPIP.NET-IP地理位置数据
IPIP.NET 是一家专注于 IP 地理位置数据的提供商,基于 BGP/ASN 数据与全球 800+ 网络监测点技术,提供高精度的 IPv4 和 IPv6 定位服务。其核心服务包括地理位置查询、详细地理信息和网络工具等,广泛应用于网络安全、广告营销、CDN 优化等领域。数据覆盖全球,支持多语言,每日更新确保实时性。IPIP.NET 提供 API 接口、离线数据库及多种语言 SDK,方便开发者集成使用。
1335 0
|
11月前
|
C# Android开发 iOS开发
2025年全面的.NET跨平台应用框架推荐
2025年全面的.NET跨平台应用框架推荐
462 23
|
12月前
|
弹性计算 开发框架 安全
基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发
本文将基于云效 Flow 流水线 Windows 构建环境和云效 Packages Nuget 制品仓库手把手教你如何开发并部署一个 .NET 应用,从环境搭建到实战应用发布的详细教程,帮助你掌握 .NET 开发的核心技能。
|
开发框架 监控 .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
219 5
|
安全 算法 编译器
.NET 9 AOT的突破 - 支持老旧Win7与XP环境
【10月更文挑战第30天】在.NET 9 中,AOT(Ahead-of-Time)编译技术在支持老旧的 Windows 7 和 XP 系统方面取得了显著进展。主要突破包括:性能提升(启动速度加快、执行效率提高)、部署优化(无需安装.NET 运行时、减小应用程序体积)、兼容性保障(编译策略优化、依赖项管理改进)以及安全性增强(代码保护机制)。这些改进使得应用程序在老旧系统上运行更加流畅、高效和安全。
467 2
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
462 2
|
12月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
338 5
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
439 0
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
231 7
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
268 0

热门文章

最新文章