zoukankan      html  css  js  c++  java
  • Rafy中的IOC

    Rafy是什么可以通过下面博客来了解

    Rafy 领域实体框架演示(3) - 快速使用 C/S 架构部署 - BloodyAngel - 博客园

    以下是看源码中的一点记录,供以后学习使用

    主要是Rafy中IOC容器的定义,实现方式,用法

    下面先看一个图:

                           

    这个图片包含,三个方面的内容

    1. 以Composer为核心的组件组合器,实现组件间通信。
    2. 以IEventBus为核心的事件总线发布订阅机制。
    3. 以IObjectContainer为核心的IOC容器。

    下面主要从IObjectContainer 接口开始

    该接口,主要提供两大方面的功能

    1. 注册。
    2. 获取。

    详细接口如下:

    /// <summary>

            /// 如果某个服务有多个实例,则可以使用此方法来获取所有的实例。

            /// </summary>

           IEnumerable<object> ResolveAll(Type type);

     

            /// <summary>

            /// 如果某个服务有多个实例,则可以通过一个键去获取对应的服务实例。

            /// </summary>

            object Resolve(Type type, string key = null);

     

            /// <summary>

            /// 注册唯一实例

            /// </summary>

           /// <param name="key">如果有必须,则传入实例的键。</param>

            void RegisterInstance(Type type, object instance, string key = null);

     

            /// <summary>

            /// 注册唯一实例

            /// </summary>

           /// <param name="instanceType">唯一实例的类型,该类型的实例会在第一次使用时被创建。</param>

            /// <param name="key">如果有必须,则传入实例的键。</param>

            void RegisterInstance(Type type, Type instanceType, string key = null);

     

            /// <summary>

            /// 注册类型

            /// </summary>

            /// <param name="key">如果有必须,则传入实例的键。否则传入 null。</param>

            void RegisterType(Type from, Type to, string key = null);

    Rafy内部默认实现了一种IOC容器接口:

     

    通过适配器模式,将IObjectContainer 适配到 IServiceContainer。

     

    通过适配器模式将IUnityContainer适配到IObjectContainer

     

    什么是UnityIOC 可以通过 深入理解IOC模式及Unity框架 - GavinJun - 博客园

    来学习了解。

    如果需要使用此种IOC则需要在Rafy环境启动,插件初始化的时候,将原有的IOC替换成UnnityIoc 替换方式如下:

     

    这是怎么做到通过设置不同IOC工厂就可以替换IOC容器的呢?

    ObjectContainerFactory.SetProvider(new UnityContainerAdapterFactory());

    主要是上面这条语句,将Rafy 默认实现的 SimpleObjectContainer替换成了

     UnityContainerAdapter

    这样整个Rafy的IOC容器管理都有UnityContainerAdapter来接管了

    首先我们看看ObjectContainerFactory里面是怎么控制的

     

    这个里面比较简单

    1. 一个工厂接口的私有变量,来存储具体的容器工厂。
    2. 一个CreateContainer方法创建独立的容器
    3. 一个SetProvider方法,这个方法是什么鬼,好像没有它,我们就没法替换自己需要的IOC容器了,来具体看一下:

    原来它只是把默认的工厂给替换掉了。

     

    那如果我们也想用自己的工厂,替换自己的IOC容器,知道该怎么做了没有呢

    首先

    1. 我们要实现 IObjectContainerFactory 这个工厂接口。
    2. 然后在合适的时机,调用SetProvider这个方法,这样就可以实现容器替换了。
  • 相关阅读:
    [转载]OpenGL函数参考(中文版)
    [转载]OpenGL 中常用的 GLUT 函数库
    VC6.0 VS2008 openGL环境配置 [和glut库的加入]
    java测试一个类的方法,用junit
    openal配置(更新)
    jsp URL 传参数 服务端接收后乱码的问题
    NeHe OpenGL 第二课 学习总结
    vs2008 添加头文件路径
    困惑之一:c++初始化成员列表
    C++中一些对原理描述相当好得语句
  • 原文地址:https://www.cnblogs.com/gdnyfcuso/p/7518845.html
Copyright © 2011-2022 走看看