依赖注入原则:
当没有依赖注入时,需要在A类中创建B类的实例,这样操作会增加A隐式依赖B类中的依赖。并且A不知道B如何实现才能够正常工作。使用接口,可以减少这种依赖关系。
1、穷人的依赖注入(Poor Man's Dependency Injection):这个模式不需要任何其他外部依赖就可以实现注入。即在程序的主入口创建所有接口的实现。
2、方法注入:如果只有该方法需要这个依赖时,使用方法参数注入依赖会很好用。从构造函数注入依赖表明类中的多数行为需要该依赖项,但如果只有少部分方法需要某个依赖,从各个方法参数注入该依赖会更好。(客户端可以通过构造函数或则方法参数沿着调用栈一直将依赖实例传递给需要使用该依赖的目标类。)缺点:方法在调用前必须准备好实例。
3、属性注入:与方法类似,属性也可以用于依赖。好处:可以在运行时改变属性实例值。从构造函数注入的依赖实例在类的整个生命周期内都可以使用,而从属性注入的依赖实例还能从类生命周期的某个中间点开始启用。
控制反转(Inversion of Control):手动构造类实例并把他们传递给构造函数的方式实现依赖注入效果,这种方式中实例是静态的不可改变。控制反转允许将构建对象图的动作推迟到运行时。
控制反转的概念通常都是在控制反转容器(container)的上下文中实现。控制反转容器组成的系统能够将应用程序使用的接口和他的实例类关联起来,并能在获取实例的同时解析所有相关的依赖。(Unity控制反转容器,程序入口初始化UnityContainer实例。注:后期想替换为其他容器比较困难)
1、注册、解析、释放模式
2、命令式与生命式注册
3、对象的生命周期
连接工厂
负责人模式
工程隔离模式
组合根:
应用程序中只应该有一个位置知道依赖注入的细节,这个位置就是组合根。在使用穷人注入时,就是手动创建构造类的地方,使用控制反转器时就是注册接口和实现类间映射关系的地方。(组合根和应用程序入口越近越好,这样能够尽快配置好依赖注入。组合根提供了一个查找依赖注入配置的公认位置,能够避免把对容器的依赖扩散到应用程序的其他地方)
约定优于配置:(网上了解,自己当前不使用,不做了解)