IOC解耦
1.先定义一个数据接口和两个数据实现类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace IDAL
{
public interface IStudent
{
//读
string Reading();
//写
string Writing();
}
}
using IDAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MSDAL
{
public class Student : IStudent
{
public string Reading()
{
return "Reading , this is MSDAL";
}
public string Writing()
{
return "Writing , this is MSDAL";
}
}
}
using IDAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MySqlDAL
{
public class Student : IStudent
{
public string Reading()
{
return "Reading , this is MySqlDAL";
}
public string Writing()
{
return "Writing , this is MySqlDAL";
}
}
}
2.实现客户端调用---直接调用
class Program
{
static void Main(string[] args)
{
//1.紧耦合 要切换数据库改动很多
MSDAL.Student studentMS = new MSDAL.Student();
Console.WriteLine("1" + studentMS.Writing() + studentMS.Reading());
//MySqlDAL.Student studentMySql = new MySqlDAL.Student();
//Console.Write(studentMySql.Writing() + studentMySql.Reading());
}
}
3.实现客户端调用---接口编程 依赖抽象
class Program
{
static void Main(string[] args)
{
//2.接口编程 依赖抽象 要切换数据库改动较多
IStudent student = new MSDAL.Student();//Student类对象还是出现在前台, 紧耦合
// IStudent student = new MySqlDAL.Student();
Console.WriteLine("2" + student.Writing() + student.Reading());
}
}
4.实现客户端调用---反射解耦
class Program { static void Main(string[] args) { //3.反射解耦 string assemblyName = "MSDAL";//程序集名称 string className = assemblyName + ".Student";//类的全名称 //IOC(控制反转):对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它 IStudent studentReflection = (IStudent)Assembly.Load(assemblyName).CreateInstance(className); Console.WriteLine("3" + studentReflection.Writing() + studentReflection.Reading()); } }
5.实现客户端调用---反射+配置文件
class Program { static void Main(string[] args) { //4.反射+配置文件 string assemblyNameConfiguration = ConfigurationManager.AppSettings["DAL"]; //程序集名称 可在配置文件中灵活切换数据层 string classNameConfiguration = assemblyNameConfiguration + ".Student";//类的全名称 //IOC(控制反转):对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它 IStudent studentConfiguration = (IStudent)Assembly.Load(assemblyNameConfiguration).CreateInstance(classNameConfiguration); Console.WriteLine("4" + studentConfiguration.Writing() + studentConfiguration.Reading()); } }
6.实现客户端调用---Spring.Net创建对象解耦
需要添加Spring.Core.dll程序集引用
class Program { static void Main(string[] args) { //5.Spring.Net创建对象 IApplicationContext SpringContext = Spring.Context.Support.ContextRegistry.GetContext();//spring容器 IStudent studentSpring = (IStudent)SpringContext.GetObject("DAL");//创建实例对象 Console.WriteLine("5" + studentConfiguration.Writing() + studentConfiguration.Reading()); } }
配置文件
<?xml version="1.0"?> <configuration> <configSections> <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> <spring> <context> <!--<resource uri="~/Objects.xml"/>--> <resource uri="config://spring/objects"/> </context> <objects> <object id="DAL" type="MSDAL.Student,MSDAL"></object> </objects> </spring> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
7.实现客户端调用---Unity 创建对象解耦
需要添加Microsoft.Practices.Unity.dll和Microsoft.Practices.Unity.Configuration.dll程序集引用
class Program { static void Main(string[] args) { //6.Unity 创建对象 IUnityContainer mycontainer = new UnityContainer();//Unity容器 UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");//配置文件信息 section.Configure(mycontainer);//将配置文件信息给Unity容器 IStudent studentUnity = mycontainer.Resolve<IStudent>();//创建实例对象 Console.WriteLine("6" + studentUnity.Writing() + studentUnity.Reading()); } }
配置文件
<?xml version="1.0"?> <configuration> <configSections> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/> </configSections> <unity> <container> <register type="IDAL.IStudent,IDAL" mapTo="MSDAL.Student,MSDAL"> <lifetime type="singleton"/> </register> </container> </unity> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup> </configuration>
声明:本文纯属个人随手笔记,如果对您有参考价值我十分开心,如果有存在错误,或者有更好的解决办法也麻烦您留言告诉我,大家共同成长,切勿恶言相。
欢迎加入MSDN技术交流群:235937854,一起发现知识、了解知识、学习知识、分享知识
浙公网安备 33010602011771号