C#设计模式之控制反转即依赖注入-Spring.NET
2017-05-13 23:25
736 查看
主流的依赖注入方案:微软企业库中的Unity、Spring.NET、StructureMap、Ninject、Castle Windsor等等。
[b]本章用简单的案例讲解 Spring.NET IOC-控制反转即依赖注入:[/b]
实例:使用Spring.NET IOC方式,解决复杂的数据访问,
如:
用户A需要使用ADO.NET实现数据访问层代码;
用户B需要使用EF实现数据访问层代码;
遇到此种情况,如果不借助控制反转,使用普通的方式解决的话,则每个用户都需要修改后台代码(违反了OOP中的开闭原则),才能实现不同用户调用不同数据访问层的问题
1、先创建一个控制台程序项目。
2、添加IUserInfoDal 接口。
3、添加Ado_NetUserInfoDal类和EFUserInfoDal类,继承IUserInfoDal接口。
EF_UserInfoDal.cs
4、引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll
5、添加Spring.Net配置节点,配置object节点
6、主函数,创建spring容器上下文
[b]本章用简单的案例讲解 Spring.NET IOC-控制反转即依赖注入:[/b]
实例:使用Spring.NET IOC方式,解决复杂的数据访问,
如:
用户A需要使用ADO.NET实现数据访问层代码;
用户B需要使用EF实现数据访问层代码;
遇到此种情况,如果不借助控制反转,使用普通的方式解决的话,则每个用户都需要修改后台代码(违反了OOP中的开闭原则),才能实现不同用户调用不同数据访问层的问题
1、先创建一个控制台程序项目。
2、添加IUserInfoDal 接口。
namespace Spring.Net { public interface IUserInfoDal { void Show(); } }
3、添加Ado_NetUserInfoDal类和EFUserInfoDal类,继承IUserInfoDal接口。
ADO_NetUserInfoDal.cs
public class ADO_NetUserInfoDal:IUserInfoDal { public void Show() { Console.WriteLine("我是 AdoNet Dal" ); } }
EF_UserInfoDal.cs
public class EF_UserInfoDal: IUserInfoDal { public void Show() { Console.WriteLine("我是EF Dal"); } }
4、引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll
5、添加Spring.Net配置节点,配置object节点
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--一定要在紧跟着configuration下面添加--> <configSections> <!--跟下面Spring.Net节点配置是一一对应关系--> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> </sectionGroup> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <!--Spring.Net节点配置--> <spring> <context> <!--容器配置--> <resource uri="config://spring/objects"/> </context> <objects xmlns="http://www.springframework.net"> <!--name 必须要唯一的,type=类的全名称,所在的程序集--> <object name="UserInfoDal" type="Spring.Net.[b]EF_UserInfoDal, Spring.Net">[/b] </object> </spring> </configuration>
6、主函数,创建spring容器上下文
namespace Spring.Net { class Program { static void Main(string[] args) { //控制权没有反转 //IUserInfoDal infoDal = new EFUserInfoDal();
//IUserInfoDal infoDal = new ADO_NetUserInfoDal(); //Spring.Net 创建实例的方式转为容器帮我们创建
//创建spring容器上下文 IApplicationContext ctx = ContextRegistry.GetContext(); //通过容器创建对象 IUserInfoDal efDal = ctx.GetObject("UserInfoDal") as IUserInfoDal; efDal.Show(); Console.ReadKey(); } } } 输出:
我是EF Dal 注: 如果在app.config 配置文件中
<object name="UserInfoDal" type="Spring.Net.EF_UserInfoDal, Spring.Net"> 将 EF_UserInfoDal 改为 ADO_NetUserInfoDal 则 输出:
我是 AdoNet Dal 类似于抽象工场(使用反射机制,在配置文件中配置)
相关文章推荐
- C#设计模式之控制反转即依赖注入-微软提供的Unity
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- Ioc 器管理的应用程序设计,前奏:容器属于哪里? 控制容器的反转和依赖注入模式
- spring.net基本使用:控制反转和依赖注入
- C# .net mvc 依赖注入、控制反转、Ioc、Autoface(草稿)
- Spring.net 控制反转(IOC)依赖注入(DI)的使用 以及Config文件的配置
- 【设计模式】控制反转(IoC)与依赖注入(DI)
- Spring.Net-DI依赖注入和Ioc控制反转
- 依赖注入&控制反转 oC 容器和Dependency Injection 模式
- 控制反转容器与依赖注入模式
- Spring的控制反转与依赖注入
- 设计模式——控制反转&依赖注入
- JAVA框架当中Spring的依赖注入和控制反转
- 控制反转容器&依赖注入模式
- Spring控制反转/依赖注入
- JAVA框架当中Spring的依赖注入和控制反转
- 控制容器的反转和依赖注入模式
- 《模式——工程化实现及扩展》(设计模式C# 版)《重新研读C#语言》——“自我检验" 参考答案:依赖注入部分
- 架构设计之依赖倒置、控制反转与依赖注入
- spring依赖注入和控制反转