1.先定义一个数据接口和两个数据实现类1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;56namespaceIDAL7{8publicinterfaceIStudent9{10//读11stringReading();1213//写14stringWriting();1516}17}
View Code
1usingIDAL;2usingSystem;3usingSystem.Collections.Generic;4usingSystem.Linq;5usingSystem.Text;67namespaceMSDAL8{9publicclassStudent : IStudent10{1112publicstringReading()13{14return"Reading , this is MSDAL";15}1617publicstringWriting()18{19return"Writing , this is MSDAL";20}21}22}
View Code
1usingIDAL;2usingSystem;3usingSystem.Collections.Generic;4usingSystem.Linq;5usingSystem.Text;67namespaceMySQLDAL8{9publicclassStudent : IStudent10{11publicstringReading()12{13return"Reading , this is MySqlDAL";14}1516publicstringWriting()17{18return"Writing , this is MySqlDAL";19}20}21}
View Code
2.实现客户端调用---直接调用1classPRogram2{3staticvoidMain(string[] args)4{5//1.紧耦合 要切换数据库改动很多6MSDAL.Student studentMS =newMSDAL.Student();7Console.WriteLine("1"+ studentMS.Writing() +studentMS.Reading());8//MySqlDAL.Student studentMySql = new MySqlDAL.Student();9//Console.Write(studentMySql.Writing() + studentMySql.Reading());10}
}
3.实现客户端调用---接口编程 依赖抽象1classProgram2{3staticvoidMain(string[] args)4{5//2.接口编程 依赖抽象 要切换数据库改动较多6IStudent student =newMSDAL.Student();//Student类对象还是出现在前台, 紧耦合7//IStudent student = new MySqlDAL.Student();8Console.WriteLine("2"+ student.Writing() +student.Reading());9}10}
4.实现客户端调用---反射解耦1classProgram2{3staticvoidMain(string[] args)4{5//3.反射解耦6stringassemblyName ="MSDAL";//程序集名称7stringclassName = assemblyName +".Student";//类的全名称8//IOC(控制反转):对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它9IStudent studentReflection =(IStudent)Assembly.Load(assemblyName).CreateInstance(className);10Console.WriteLine("3"+ studentReflection.Writing() +studentReflection.Reading());11}12}
5.实现客户端调用---反射+配置文件1classProgram2{3staticvoidMain(string[] args)4{56//4.反射+配置文件7stringassemblyNameConfiguration = ConfigurationManager.AppSettings["DAL"];//程序集名称 可在配置文件中灵活切换数据层8stringclassNameConfiguration = assemblyNameConfiguration +".Student";//类的全名称910//IOC(控制反转):对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它11IStudent studentConfiguration =(IStudent)Assembly.Load(assemblyNameConfiguration).CreateInstance(classNameConfiguration);12Console.WriteLine("4"+ studentConfiguration.Writing() +studentConfiguration.Reading());13}14}
6.实现客户端调用---Spring.Net创建对象解耦需要添加Spring.Core.dll程序集引用
1classProgram2{3staticvoidMain(string[] args)4{5//5.Spring.Net创建对象6IapplicationContext SpringContext = Spring.Context.Support.ContextRegistry.GetContext();//spring容器7IStudent studentSpring = (IStudent)SpringContext.GetObject("DAL");//创建实例对象8Console.WriteLine("5"+ studentConfiguration.Writing() +studentConfiguration.Reading());9}10}
配置文件
1<?xmlversion="1.0"?>2<configuration>3<configSections>4<sectionGroupname="spring">5<sectionname="context"type="Spring.Context.Support.ContextHandler, Spring.Core"/>6<sectionname="objects"type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>7</sectionGroup>8</configSections>9<spring>10<context>11<!--<resource uri="~/Objects.xml"/>-->12<resourceuri="config://spring/objects"/>13</context>14<objects>15<objectid="DAL"type="MSDAL.Student,MSDAL"></object>16</objects>1718</spring>19<startup><supportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5"/></startup></configuration>
View Code
7.实现客户端调用---Unity 创建对象解耦需要添加Microsoft.Practices.Unity.dll和Microsoft.Practices.Unity.Configuration.dll程序集引用
1classProgram2{3staticvoidMain(string[] args)4{5//6.Unity 创建对象6IUnityContainer mycontainer =newUnityContainer();//Unity容器7UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");//配置文件信息8section.Configure(mycontainer);//将配置文件信息给Unity容器9IStudent studentUnity = mycontainer.Resolve<IStudent>();//创建实例对象10Console.WriteLine("6"+ studentUnity.Writing() +studentUnity.Reading());11}12}
配置文件
1<?xml version="1.0"?>2<configuration>3<configSections>45<sectionname="unity"type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>6</configSections>7<unity>8<container>9<registertype="IDAL.IStudent,IDAL"mapTo="MSDAL.Student,MSDAL">10<lifetimetype="singleton"/>11</register>12</container>13</unity>1415<startup><supportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5"/></startup>16</configuration>
View Code