1. 实际控制类中,构造函数中 参数是 接口类型
2. 注册的哪个类实现的接口, 在实际控制类中就应用哪个类中的方法
具体依赖抽象
/*ToggleBar依赖render才能正常工作,但render的构造却不受它控制,它把控制权交给了具体的使用者,这就是控制反转。render通过构造方法传入,这个就叫依赖注入。*/
3. 工厂是抽象类,里面有一些工厂的共性,不同工厂实现抽象工厂的方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Unity;
namespace IOC
{
class Program
{
static void Main(string[] args)
{
UnityContainer container = new UnityContainer();
container.RegisterType<IBookCategary, PhilosophyBook>(); // 注册的是PhilosophyBook类,也可以注册其他类
// container.RegisterType<>
container.RegisterType<IBookCategary, HistoryBook>(); // 注册的是HistoryBook类,也可以注册其他类
// IPeople people = container.Resolve<Reader>(); //这个不是这么玩的
IBookCategary book = container.Resolve<PhilosophyBook>(); //关键是这个book的获取交到程序员自己定义获取哪本
Console.WriteLine(book.PrintBookName());
Console.Read();
}
}
//人接口
public interface IPeople
{
void ReadBook();
}
public interface IBookCategary
{
string PrintBookName();
}
public class PhilosophyBook : IBookCategary
{
public string PrintBookName()
{
return "这是一本哲学书";
}
}
public class HistoryBook : IBookCategary
{
public string PrintBookName()
{
return "这是一本历史书";
}
}
public class Reader : IPeople
{
IBookCategary _book;
/// <summary>
/// 构造函数注册
/// </summary>
/// <param name="pw"></param>
public Reader(IBookCategary book)
{
_book = book;
}
public void ReadBook()
{
if (_book != null)
{
Console.WriteLine(_book.PrintBookName());
}
;
}
}
}