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. JS 对象 合并

    来自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Sy ...

  2. (5)Oracle基础--约束

    · 约束的作用 <1> 定义规则 <2> 确保数据的完整性 · 约束 <1> 非空约束 ① 创建表时为字段添加非空约束 CREATE TABLE table_nam ...

  3. springmvc 简单框架

    1.依赖 2.web.xml配置: 3.springmvc配置文件: 4.Controller 5.index.jsp页面: 6.hello.jsp 7.效果:

  4. day 65 crm(2) admin源码解析,以及简单的仿造admin组件

    前情提要: crm中的admin组件重写. 一:admin的autodiscover 作用:实现扫面该项目中的所有的admin 1:执行顺序-> 按照注册的顺序执行 二:单例模式 1:普通案例的 ...

  5. jdbc连接1(可以注入)

    package demo3class; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepa ...

  6. (转)CentOS7下yum安装mysql配置多实例

    原文:http://blog.csdn.net/poklau/article/details/54951798

  7. Java之集合(四)Vector和Stack

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7296023.html 1.前言 本章介绍Java集合List中的Vector和其子类Stack.Vector类是 ...

  8. 手风琴图片和钢琴导航栏JQ滑动特效

    手风琴JQ滑动特效 1.效果预览: 2.相关代码: <!DOCTYPE html> <html lang="en"> <head> <me ...

  9. Sequel简介

    Sequel: Ruby数据库工具包 简介 Sequel是Ruby中用于访问SQL数据库的一个简单.灵活.强大的工具包. Sequel能够保证线程安全,提供了连接池功能以及简洁的SDL用于创建SQL查 ...

  10. 详解XMLHttpRequest的跨域资源共享

    0x00 背景 在Browser Security-同源策略.伪URL的域这篇文章中提到了浏览器的同源策略,其中提到了XMLHttpRequest严格遵守同源策略,非同源不可请求.但是,在实践当中,经 ...