Lind.DDD.IoC(大叔推荐)~在服务定位器中引入IoC容器~容器的适配器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

关于依赖倒置(DIP)

高层模块不依赖于低层模块的实现,而低层模块依赖于高层模块定义的接口,通俗的讲,就是高层模块定义接口,低层模块负责实现,这在我们实际开发中经常被用到,层与层之间引用,经常被添加一个接口层去隔离,在接口层定义相关业务规范,而底层去实现它,高层只引用这个接口,当高级需要其它扩展,直接添加新的接口,由新的底层模块去实现即可,底层其它代码不需要修改,这也完全复合开闭原则(OCP).

关于控制反转(IOC)

控制反转是一种设计模式,像单例,工厂,适合器都属于设计模式的一种,它是依赖倒置原则的具体实现,它告诉我们应该如何做,来解除相互依赖模块的耦合.

关于依赖注入(DI)

是IOC的一种实现方式,我们经常说的构造方法注入,属性注入,接口注入,指的就是DI,而我们经过说的unity,autofac,castle指的是DI的框架,即我们的IOC容器!

关于Lind.DDD.IoC容器

对于Lind.DDD.IoC模块来说,主要实现的功能是IoC和AoP,它在整个框架中都起到了底层支持的作用,如你的仓储在生产时,需要用到IoC;你的业务模块根据一个规则实现了多种策略,在生产这个业务模块时,需要用到IoC容器,而这个IoC容器可以通过服务定位器很方便找到你的依赖关系,坦白的说,对于所有对象的生产,都离不开服务定位器.

关于服务定位器(ServiceLocator)

一个程序集依赖别一个程序集,我们的服务定位器将帮助我们在Bin目录查找对应的依赖关系,帮我们生产对象;Lind.DDD里的服务定位器依赖了Lind的IocContainer,而新的IOC容器如果希望被服务定位器使用,我们只要实现IocContainer即可,这对于程序的扩展性是有好处的,目前Lind.IoC只集成了unity和autofac两种IoC容器.

关于Lind框架的IContainer

对所有第三方IoC容器的抽象,它只实现了最一般的IoC方法,如注入,反转,是否被注入等,具体看一下代码

    /// <summary>
    /// IoC容器规范
    /// 作者:仓储大叔
    /// </summary>
    public interface IContainer
    {
        /// <summary>
        /// 反射成对象
        /// </summary>
        /// <typeparam name="TService">接口类型</typeparam>
        /// <returns>具体类型</returns>
        TService Resolve<TService>();
        /// <summary>
        /// 反射成对象
        /// </summary>
        /// <typeparam name="TService">接口类型</typeparam>
        /// <returns>具体类型</returns>
        object Resolve(Type type);
        /// <summary>
        /// 反射成对象
        /// </summary>
        /// <typeparam name="TService">接口类型</typeparam>
        /// <param name="overridedArguments">参数</param>
        /// <returns>具体类型</returns>
        TService Resolve<TService>(object overridedArguments);
        /// <summary>
        /// 反射成对象
        /// </summary>
        /// <typeparam name="TService">接口类型</typeparam>
        /// <param name="overridedArguments">参数</param>
        /// <returns>具体类型</returns>
        object Resolve(Type serviceType, object overridedArguments);
        /// <summary>
        /// 注册抽象类型与具体实现的类型
        /// </summary>
        /// <param name="from">接口类型</param>
        /// <param name="to">具体类型</param>
        void RegisterType(Type from, Type to);
        /// <summary>
        /// 类型是否被注册到IoC容器
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        bool IsRegistered(Type type);
    }

关于适配器模式

对于多种IoC容器的统一,我们借用了适配器模式,新添加了适配器类去实现我们自己的IContainer接口,在实现时,事实上是对原来第三方容器的重写,这种模式虽然添加了额外的类对象,但实现了对现有功能的扩展.

关于框架级的工厂模式

工厂模式一般不去实现,在业务层直接使用ioc容器生产对象即可,你使用工厂模块,一般都会有对象的switch这种坏味道的块出现,但对于比较稳定的框架对象来说,使用工厂模式还是比较不错的选择,因为你的框架实现是比较固定的,所以可以使用switch来进行策略的控制,从而生产指定的对象,当然对于不满足条件的,我们也应该手动throw出来,告诉开发人员.

结束语

希望大家都去自己写C#的框架,而不是每次都依赖从java共享出来的框架,感觉味道怪怪的,难道C#程度员真的这么懒呀!

哈哈!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:Lind.DDD.IoC(大叔推荐)~在服务定位器中引入IoC容器~容器的适配器,如需转载请自行联系原博主。

目录
相关文章
|
4月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
1月前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。
|
1月前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
35 0
|
3月前
|
XML Java 开发者
经典面试---spring IOC容器的核心实现原理
作为一名拥有十年研发经验的工程师,对Spring框架尤其是其IOC(Inversion of Control,控制反转)容器的核心实现原理有着深入的理解。
156 3
|
2月前
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
80 0
|
2月前
|
设计模式 存储 C++
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现(二)
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现
|
2月前
|
存储 C++ 容器
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现(一)
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现
|
4月前
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
|
4月前
|
XML Java 数据格式
Spring5入门到实战------2、IOC容器底层原理
这篇文章深入探讨了Spring5框架中的IOC容器,包括IOC的概念、底层原理、以及BeanFactory接口和ApplicationContext接口的介绍。文章通过图解和实例代码,解释了IOC如何通过工厂模式和反射机制实现对象的创建和管理,以及如何降低代码耦合度,提高开发效率。
Spring5入门到实战------2、IOC容器底层原理
|
4月前
|
XML Java 数据格式
Spring5入门到实战------8、IOC容器-Bean管理注解方式
这篇文章详细介绍了Spring5框架中使用注解进行Bean管理的方法,包括创建Bean的注解、自动装配和属性注入的注解,以及如何用配置类替代XML配置文件实现完全注解开发。
Spring5入门到实战------8、IOC容器-Bean管理注解方式