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. 具体类图如下

  • 相关阅读:
    事务传播机制,搞懂。
    洛谷 P1553 数字反转(升级版) 题解
    洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here 题解
    洛谷 P1055 ISBN号码 题解
    洛谷 P2141 珠心算测验 题解
    洛谷 P1047 校门外的树 题解
    洛谷 P1980 计数问题 题解
    洛谷 P1008 三连击 题解
    HDU 1013 题解
    HDU 1012 题解
  • 原文地址:https://www.cnblogs.com/ZengYunChun/p/6273978.html
Copyright © 2011-2022 走看看