using System;
using System.Collections.Generic;
using System.Text;
namespace DAL
{
public class Oppo
{
public void PlayPhone() {
Console.Write('~hello Oppo');
}
}
}
BLL
using System;
using System.Collections.Generic;
using System.Text;
namespace BLL
{
public class PhoneBLL
{
public void PlayPhone() {
DAL.Oppo oppo = new DAL.Oppo();
oppo.PlayPhone();
}
}
}
控制塔输出
using System;
namespace IOCDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine('Hello World!');
new BLL.PhoneBLL().PlayPhone();
Console.ReadKey();
}
}
}
运行后
using IDAL;
using System;
using System.Collections.Generic;
using System.Text;
namespace DAL
{
public class Vivo:IPhone
{
public void PlayPhone() {
Console.Write('~hello Vivo');
}
}
}
BLL层如何能够不进行修改实现调用呢?可以使用构造函数、属性、接口进行注入,就不一一实现了(俺就是想偷懒~~)
using DAL;
using IDAL;
using System;
using System.Collections.Generic;
using System.Text;
namespace BLL
{
public class PhoneBLL
{
public IPhone _iphone;
public PhoneBLL( IPhone iphone) {
this._iphone = iphone;
}
public void PlayPhone() {
_iphone.PlayPhone();
}
}
}
UI 这个时候我想玩那个手机我new 那个对象就可以了
using DAL;
using IDAL;
using System;
using System.Reflection;
namespace IOCDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine('Hello World!');
IPhone iPhone = new Vivo();
BLL.PhoneBLL phoneBLL = new BLL.PhoneBLL(iPhone);
phoneBLL.PlayPhone();
Console.ReadKey();
}
}
}
using DAL;
using IDAL;
using System;
using System.Reflection;
namespace IOCDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine('Hello World!');
//Load(程序集名称) CreateInstance (类名称,是否区分大小写)
Assembly asm = Assembly.Load('DAL');
IPhone phone = (IPhone)asm.CreateInstance('DAL.Oppo', true);
BLL.PhoneBLL phoneBLL = new BLL.PhoneBLL(phone);
phoneBLL.PlayPhone();
Console.ReadKey();
}
}
}
改过之后每次更换手机还是要改代码重新发布,这里可以使用配置文件实现不改代码切换使用的手机
5.
using DAL;
using IDAL;
using System;
using System.Configuration;
using System.Reflection;
namespace IOCDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine('Hello World!');
string config = ConfigurationManager.AppSettings['DAL'].ToString();
string[] configList = config.Split(',');
Assembly asm = Assembly.Load(configList[0]);
//Load(程序集名称) CreateInstance (类名称,是否区分大小写)
IPhone phone = (IPhone)asm.CreateInstance(configList[1], true);
//IPhone phone = new Vivo();
BLL.PhoneBLL phoneBLL = new BLL.PhoneBLL(phone);
phoneBLL.PlayPhone();
Console.ReadKey();
}
}
}
改配置文件
<?xml version='1.0' encoding='utf-8' ?>
<configuration>
<appSettings>
<add key='DAL' value='DAL,DAL.Vivo'/>
</appSettings>
</configuration>
6.小小总结下
最后咱也不知道这理解对不对,只要思想不滑坡,方法总比困难多,欢迎各位大佬指导呀~~
联系客服