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这个方法,这样就可以实现容器替换了。

Rafy中的IOC的更多相关文章

  1. Rafy中的EventBus

    EventBus主要是干嘛使的,直接翻译叫事件总线. 是观察者模型的实现,利用它你既可以实现观察者模型的业务场景,还可以基于它的事件驱动机制来实现应用程序内组件之间的解耦与通信. 我们来看看有Even ...

  2. Android 进阶 Android 中的 IOC 框架 【ViewInject】 (下)

    上一篇博客我们已经带大家简单的吹了一下IoC,实现了Activity中View的布局以及控件的注入,如果你不了解,请参考:Android 进阶 教你打造 Android 中的 IOC 框架 [View ...

  3. spring.net中的IOC和DI-初使用

    前面准备:下载spring.net并解压 下载地址:spring.net下载地址 Ioc:控制反转         DI:依赖注入 一.IOC(控制反转) 1.新建一个控制台程序springTest, ...

  4. Castle框架中的IOC和AOP机制

    反转控制(IOC)和面向切面编程(AOP)技术作为当前比较流行的技术,其优势已受到广泛关注,但是这两项新技术在实际项目上的应用研究却很落后,而且在.NET平台下实现这两项技术没有形成可以广泛套用的框架 ...

  5. Spring——Web应用中的IoC容器创建(WebApplicationContext根应用上下文的创建过程)

    基于Spring-4.3.7.RELEASE Spring的配置不仅仅局限在XML文件,同样也可以使用Java代码来配置.在这里我使用XML配置文件的方式来粗略地讲讲WebApplicationCon ...

  6. ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)

    前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 目录 ...

  7. ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)

    前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 目录 ...

  8. ASP.NET Core中使用IOC三部曲(三.采用替换后的Autofac来实现AOP拦截)

    前言 本文主要是详解一下在ASP.NET Core中,采用替换后的Autofac来实现AOP拦截 觉得有帮助的朋友~可以左上角点个关注,右下角点个推荐 这里就不详细的赘述IOC是什么 以及DI是什么了 ...

  9. Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下)

    上一篇博客我们已经带大家简单的吹了一下IoC,实现了Activity中View的布局以及控件的注入,如果你不了解,请参考:Android 进阶 教你打造 Android 中的 IOC 框架 [View ...

随机推荐

  1. 使用dev-tool定位页面性能瓶颈

    这是部门同事的一次内部分享,听完后受益颇多,趁着记忆还算新鲜,赶紧记录一波. 从 dev-tool 看页面 parse 过程 时间都去哪儿了 当浏览器发送一个请求到接受所有响应数据截止,这个过程发生了 ...

  2. 安装gitlab

    安装源: git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 7-10-stable gitlab 安装文档: 在github上:gitl ...

  3. Go语言学习笔记(2)——变量、常量

    1. 变量(变量由字母.数字和下划线组成,且不能以数字开头!)      1.1 第一种 var name type // 未赋值时使用默认值 name = value 1.2 第二种: 根据所赋的值 ...

  4. c#连接oracle遇到的问题

    1.最近在做项目,发现一个很有意思的现象.我在项目中引用System.Data.OracleClient进行oracle库的远程连接,一直出错.后来无意中,将.net framework 4.0框架改 ...

  5. java内存数据管理

    准确的说应该是java8以前的内存管理方式 区别在永久代(方法区)上 public class RamManager { //1.a存储于永久代 public static int a =1; pri ...

  6. 搭建互联网架构学习--003--maven以及nexus私服搭建

    跳过,等待完善中,,, 后台服务工具maven:使用Nexus配置Maven私有仓库 一.安装配置Nexus 1. 下载nexus https://www.sonatype.com/download- ...

  7. 程序模拟HTTP请求

    1. 使用HttpClient 前面拼接StringContent string strContent = "client_id=client&client_secret=secre ...

  8. Centos调整时间时区

    一台VPS的时间出错,使用常规手段修改均失败.提示hwclock failed : ntpdate stdtime.sinica.edu.tw 如果你的 VPS 提示没有 ntpdate 这个命令,可 ...

  9. Python -- 数据结构实现

    1.堆栈(pyStack.py) class PyStack: def __init__(self, size=20): self.stack = [] self.size = size self.t ...

  10. 《Mysql技术内幕,Innodb存储引擎》——文件、表

    文件 日志 错误日志 对Mysql启动.运行和关闭过程进行记录,通过SHOW VARIABLES LIKE 'log_error'查看日志文件位置. 慢查询日志 Mysql启动时设置一个阈值,运行时间 ...