运用Unity实现依赖注入[结合简单三层实例]
运用Unity实现依赖注入[结合简单三层实例]
一:理论部分
依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口编程技术。开发人员编写实现接口的类代码,并基于接口或者对象类型使用容器注入依赖 的对象实例到类中。用于注入对象实例的技术是接口注入、构造函数注入、属性(设置器)注入和方法调用注入。
Unity是微软企业库一部分,是一个轻量级、可扩展的依赖注入容器,支持构造函数、属性和方法调用注入;
针对依赖注入以前我也写过一篇结合三层的文章:spring.net 结合简单三层实例
二:实例简介
1:本实例将通过一个简单的三层演示使用Unity实现依赖注入,并把相应的具体实例写入在配置文件里,达到后期可能方便修改;首先看一下实例分层的情况:
IAopDAL-数据接口层(类库) [AopDAL AopOracelDAL]-分别实现数据接口的数据层(类库)
IAopBLL-逻辑接口层(类库) AopBLL-实现逻辑接口层(类库)
AopUnity-主程序层(控制台程序)
Command-公共助手层(类库)
2:其中Command我们简单编写一个实现Unity助手的类;首先要引用几个Unity的DLL文件;
3:AopDAL、AopOracelDAL是两个实现不同功能的类库,在这我们就比喻成一个插入MSSQL数据库,另外一个就是插入Oracel数据库;
其中AopBLL我们没有直接引用具体的AopDAL数据层,而是引用其对应接口层;主程序 AopUnity同样也没有具体的BLL层,也是引用其BLL接口层;
把接口对应的具体层类写入到配置文件里,做到依赖注入,只要简单修改配置文件就可以达到修改调用;
因为AopDAL、AopOracelDAL、AopBLL我们都没有直接引用,所以在生成DLL后是不会保存在主程序的bin里面,所以我们要修改这三个生成的路径;
三:实例编码
1:IAopDAL层我们只简单创建一个IReadData类代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace IAopDAL
{
public interface IReadData
{
string ReadDataStr(string Name);
}
}
2:AopDAL实现接口层IAopDAL
using IAopDAL;
namespace AopDAL
{
public class ReadDataDAL:IReadData
{
public string ReadDataStr(string Name)
{
return string.Format("把{0}写入MSSQL数据库成功", Name);
}
}
}
3:AopOracelDAL同样实现IAopDAL层,其功能跟AopDAL一样
using IAopDAL;
namespace AopOracelDAL
{
public class ReadDataDAL:IReadData
{
public string ReadDataStr(string Name)
{
return string.Format("把{0}写入Oracel数据库成功", Name);
}
}
}
4:IAopBLL逻辑接口层的内容如下:
namespace IAopBLL
{
public interface IReadDataBLL
{
string ReadDataStr(string Name);
}
}
5:AopBLL层实现IAopBLL接口层,要引用IAopDAL、IAopBLL、Command;
其中IReadData bllServer = new UnityContainerHelp().GetServer<IReadData>();就是过过公共助手Command类库调用Unity来实现依赖注入,
using IAopDAL;
using IAopBLL;
using Command;
namespace AopBLL
{
public class ReadDataBLL:IReadDataBLL
{
IReadData bllServer = new UnityContainerHelp().GetServer<IReadData>();
public string ReadDataStr(string Name)
{
return bllServer.ReadDataStr(Name);
}
}
}
6:Command公类助手代码如下,简单对Unity的封装,引用几个Unity的命名空间,我们把依赖注入的对象写入在主程序的.config文件里,这边就是通过读取配置文件来查看其对应哪个类库;
using System.Text;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using Microsoft.Practices.Unity.InterceptionExtension;
using Microsoft.Practices.Unity.InterceptionExtension.Configuration;
using System.Configuration; namespace Command
{
public class UnityContainerHelp
{
private IUnityContainer container;
public UnityContainerHelp()
{
container = new UnityContainer();
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
container.LoadConfiguration(section, "FirstClass");
} public T GetServer<T>()
{
return container.Resolve<T>();
} public T GetServer<T>(string Name)
{
return container.Resolve<T>(Name);
}
}
}
7:主程序代码:同样只是简单的引用Command、IAopBLL两层;
using Command;
using IAopBLL;
namespace AopUnity
{
class Program
{
static void Main(string[] args)
{
IReadDataBLL bllServer = new UnityContainerHelp().GetServer<IReadDataBLL>();
Console.WriteLine(bllServer.ReadDataStr("踏浪帅"));
}
}
}
我们新建一个App.config文件(因为我主程序是控制台,若是WEB程序可以把它放在web.config里面);其中register 就是我们注入的节点,type为接口层,mapTo则是我们对应的具体实现层,这边也是我们修改配置的地方;
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity xmlns="http://schemas.microsoft.com/practces/2010/unity">
<container name="FirstClass">
<register type="IAopBLL.IReadDataBLL,IAopBLL" mapTo="AopBLL.ReadDataBLL,AopBLL">
</register>
<register type="IAopDAL.IReadData,IAopDAL" mapTo="AopOracelDAL.ReadDataDAL,AopOracelDAL"/>
</container>
</unity>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
四:运行效果
1:当配置文件里为:
<register type="IAopDAL.IReadData,IAopDAL" mapTo="AopOracelDAL.ReadDataDAL,AopOracelDAL"/>
2:修改配置文件内容:
我们只是简单的修改配置就达到我们想要的效果,消除对具体实现层的引用;
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。 因为,我的写作热情也离不开您的肯定支持。
感谢您的阅读(因为源代码现在我正接着写Unity实现AOP的功能,所以将在实现功能后一起贴出)
运用Unity实现依赖注入[结合简单三层实例]的更多相关文章
- spring IOC --- 控制反转(依赖注入)----简单的实例
IoC(Inversion of Control)控制反转,对象创建责任的反转,在spring中BeanFacotory是IoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的 ...
- 运用Unity实现依赖注入[有参构造注入]
上一篇章讲到关于使用Unity实现依赖注入的简单功能,针对有博友提出关于有参构造注入的问题; 本文同样通过一个实例来讲解如何实现此功能,文中一些分层讲解可以看上一文章(运用Unity实现依赖注入[结合 ...
- .NET 使用unity实现依赖注入
原文地址:http://www.cnblogs.com/wujy/p/3317795.html 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口 ...
- Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)
在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...
- IOC使用Unity 实现依赖注入
转自:http://www.cnblogs.com/techborther/archive/2012/01/06/2313498.html http://www.cnblogs.com/xishuai ...
- DI(依赖注入)简单理解 NO1
依赖注入:目的削减程序的耦合度,达到高内聚/低耦合 常用形式:Interface Driven Design接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等.通过Io ...
- 在 mvc 4 中使用 unity 进行依赖注入
在 mvc 4 中使用 unity 进行依赖注入 关于依赖注入的概念,这里就不再叙述了,我们用 mvc 4 结合 unity,使用构造函数来进行依 赖注入.具体步骤如下: 1. 首先建立 一个 mvc ...
- Asp.Net MVC4 使用Unity 实现依赖注入
项目创建参考 上一篇 <<Asp.Net MVC5 使用Unity 实现依赖注入>>, 不同的是这里是 Unity.MVC4 装好后会出现 然后示例说在这里写对应关系 ...
随机推荐
- Cocos发育Visual Studio下一个HttpClient开发环境设置
Cocos2d-x 3.x相关类集成到网络通信libNetwork图书馆project于.这其中包括:HttpClient分类. 我们需要在Visual Studio溶液中加入libNetwork图书 ...
- BIP Requests Are Failing With Error "OPP Error Oracle.apps.xdo.XDOException: Error Creating Lock Fil
In this Document Symptoms Cause _afrLoop=975833031487795&id=1512691.1&displayIndex=1&a ...
- 经典Loading 动漫赏析
0. 传统的菊花Loading动画 假设作为程序猿的你还在用菊花作为Loading动画,是时候换个口味了.来看下5种不错的Loading动画. 几种颜色组成的动画,给用户一个美感. 1.android ...
- Excel 删除所有错误公式
当前工作表的话可以F5-定位-公式-错误值 来选中所有含错误值的单元格,然后按delete删除. 多表的话没办法了,因为不能跨工作表多重选中,只能一页页的删,或者用vba编个宏来解决
- 如此高效通用的分页存储过程是带有sql注入漏洞的
原文:如此高效通用的分页存储过程是带有sql注入漏洞的 在google中搜索“分页存储过程”会出来好多结果,是大家常用的分页存储过程,今天我却要说它是有漏洞的,而且漏洞无法通过修改存储过程进行补救,如 ...
- 跟着大神重写的KNN 文档归类小工具
·背景 在知道KNN之前,楼主有时候会粗糙地做一些分类模型的计算.在拜读了Orisun大神[http://www.cnblogs.com/zhangchaoyang/articles/2162393. ...
- 《自己动手写CPU》写书评获赠书活动结果
<自己动手写CPU>写书评获赠图书的读者有: 京东:8***2.16号哨兵.magicyu.kk6803.jddickyd.杰出的胡兵 亚马逊:徐贺.马先童.jaychen.farmfar ...
- VS2013调试的时候出现 “检测到在集成的托管管道模式下不适用的 ASP.NET 设置的解决方法”
在web.config里面添加了下面一句,完美解决 <system.webServer> <validation validateIntegratedModeConfiguratio ...
- 把VBScript的函数迁移到C#.NET
原文:把VBScript的函数迁移到C#.NET VBScript 5.6 Functions C# code Abs System.Math.Abs Array New Object() { } A ...
- 优秀个人免费私有云OwnCloud 8.0终于发布 - 亮眼新功能初探简介
OwnCloud是一个基于Linux的私有云开源项目,用户可以免费使用它来搭建自己的私有云来进行文件和多媒体等的分享. 本人有幸在大概一年多前因为项目需要而接触和使用到OwnCloud,但不幸的是当时 ...