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


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

相关文章
|
19天前
|
开发框架 监控 .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
|
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 令牌以及在控制器中使用认证信息
|
3月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
134 6
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
44 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
67 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
50 0
|
4月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
4月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
135 0
|
7月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
195 0
|
7月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
82 0