zoukankan      html  css  js  c++  java
  • Castle IOC概念理解

    最近在用Castle,里面有些概念比较容易混淆,特此解释一下:

    1. 容器(Container):Windsor是一个反转控制容器。它创建在一个微内核的基础之上,这个微内核能够扫描类并且试图找到这些类用到哪些对象引用、对象依赖,然后把这些依赖信息提供给类使用。

    2. 组件(Component):也就是我们通常所说的业务逻辑单元及相应的功能实现,组件是一个可复用的代码单元。它应该实现并暴露为一个服务。组件是实现一个服务或接口的类。

    3. 服务(Service) :也就是相应的组件接口或N个Component按业务逻辑组合而成的业务逻辑接口。接口是服务的规范,它创建一个抽象层,你可以轻松的替换服务的实现。

    4. 扩张单元插件(Facilities):提供(可扩张)容器以管理组件。

    Abp框架使用Caslte的基本流程

    1. 声明IocManager实体类, 继承注册, 反转的接口, 包含一个IWindsorContainer的属性用来当作容器

    2. 静态构造函数中创建本身IocManager的实例,同时实例化容器属性, 最后用容器把IocManager注册到castle中去,成为单例,可以说系统中有两个单例,一个是静态函数中的全局单例,第二个是在构造函数中用容器注册的单例,可以用反转来得到.(改正: 应该是一个单例, 这里用UsingFactoryMethod貌似把自身,也就是Instance注入到系统中了!!!!!)

            static IocManager()
            {
                Instance = new IocManager();
            }
    
            /// <summary>
            /// Creates a new <see cref="IocManager"/> object.
            /// Normally, you don't directly instantiate an <see cref="IocManager"/>.
            /// This may be useful for test purposes.
            /// </summary>
            public IocManager()
            {
                IocContainer = new WindsorContainer();
                _conventionalRegistrars = new List<IConventionalDependencyRegistrar>();
    
                //Register self!
                IocContainer.Register(
                    Component.For<IocManager, IIocManager, IIocRegistrar, IIocResolver>().UsingFactoryMethod(() => this)
                    );
            }

    3. 同时在IocManager中定义了怎么用约定的方式来注册类, 一般实现方式是: 用AddConventionalRegistrar在模块的PreInitialize中增加继承了IConventionalDependencyRegistrar的类,由于AbpKernelModule是系统第一个加载的模块,所以在AbpKernelModule的模块的Initialize中统一把所有按照约定的类注入到容器中,通过调用IocManager中的RegisterAssemblyByConvention方法实现

    4. 具体类图如下

  • 相关阅读:
    Big Data Resources on the AWS Knowledge Center[Classic]
    New AWS Certification Specialty Exam for Big Data [Classic]
    什么是数据湖?【经典】What is Data Lake? [Classic]
    Build a Data Lake Foundation with AWS Glue and Amazon S3
    如何优雅的关闭Java线程池
    聊聊jstack的工作原理
    类成员变量在哪里分配
    内存那点事
    Java Class文件格式详解
    一个多年互联网从业者,对刚入职场人最真诚的忠告
  • 原文地址:https://www.cnblogs.com/ZengYunChun/p/6273978.html
Copyright © 2011-2022 走看看