1 为什么需要使用ioc
细节还会依赖细节。
使用ioc的话,以三层架构为例,当数据访问层(dal)层改变后,业务逻辑层(bll)也得改,甚至表示层(ui)也要改,使用ioc后dal层的改变不会影响其它层
自动注入(通过反射):如果1个对象的构造函数参数有多个,每个参数的构造函数又依赖其他参数,你需要写一大堆得代码来构造这个对象实例,有自动注入就不用了。
通过ioc可以轻松替换框架的默认实现,后注册覆盖前注册的,易于框架升级扩展。
Ioc是一种设计实现,Di是ioc的实现手段。
2 实现
实现遇到的问题:
相关问题:
1 有依赖关系-通过递归方法构造实例。
2 循环依赖:.net 自带的di会报错。
3 一个接口多个实现:一般来讲,后注册的会覆盖前注册的,可以通过注册一个工厂,然后通过工厂实例里面的方法构造相关类型的实例。
4 构造方法参数是基本类型,.net 可以扩展注册方法,然后在注册时通过resolve传入基本参数值
5 属性注入和方法注入:
3 .net core 自带的 di 构造函数选择
在所有合法的候选构造函数列表中,最终被选择出来的构造函数具有这么一个特征:每一个候选构造函数的参数类型集合都是这个构造函数参数类型集合的子集。如果这样的构造函数并不存在,一个类型为InvalidOperationException的异常会被跑出来。
参考链接
https://www.cnblogs.com/linybo/p/10053359.html
标签:构造,实例,注册,net,ioc,构造函数 From: https://www.cnblogs.com/tomorrow0/p/16220334.html