概述
通过Ioc消除组件或者模块之间的直接依赖,增加一定配置的灵活性。Ioc + 反射机制,可以将部分依赖移出到配置文件中,减少项目之间的引用依赖性,也是一种解耦方式。所谓控制反转可以理解为对象的创建交由容器根据配置信息,灵活动态的创建对象,而非通过new对象的方式硬编码。
DI依赖注入:在Ioc时,具体的业务对象之间的关联,通过注入的方式赋值。主要方式有:
构造器注入,属性赋值,接口赋值,特性。
Ioc是一种思想,目的是解耦;DI则是在Ioc解耦情况时,业务之间需要有的耦合,通过注入实现,依然不需要new对象。
最后,不要所有的依赖关系都使用Ioc和DI去分离。大部分情况下反而会造成不易理解。
通常在某一种功能存在多个互相独立的实现时,可以考虑使用,还要看是否会给配置文件造成巨大压力。
.net中常用Ioc框架 Unity:
public class Program
{
static void Main(string[] args)
{
//IOperate operate = new Calc();
//var m = operate.Add();
IUnityContainer container = new UnityContainer();
container.RegisterType<IOperate, Calc>();
var instance = container.Resolve<IOperate>();
instance.Add();
}
}
public interface IOperate
{
int Add();
int Sub();
}
public class Calc : IOperate
{
public int Add()
{
throw new NotImplementedException();
}
public int Sub()
{
throw new NotImplementedException();
}
}
更多Unity可参考: