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. 730. Count Different Palindromic Subsequences

    Given a string S, find the number of different non-empty palindromic subsequences in S, and return t ...

  2. httprunner 使用总结

    HttpRunner 概念 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试 ...

  3. LCS2 - Longest Common Substring II(spoj1812)(sam(后缀自动机)+多串LCS)

    A string is finite sequence of characters over a non-empty finite set \(\sum\). In this problem, \(\ ...

  4. centos6安装最新syslog-ng推送hdfs

    可参考以下网址: installhttps://www.syslog-ng.com/community/b/blog/posts/latest-syslog-ng-available-rhel-6-c ...

  5. 【wireshark】插件开发(二):Lua插件开发介绍

    1. Wireshark对Lua的支持 本节相关内容可参考Wireshark开发指南第10章”Lua Support in Wireshark”. Wireshark集成了Lua解释器,以支持Lua脚 ...

  6. 基于ajax 的 几个例子 session ,ajax 实现登录,验证码 ,实现ajax表单展示

    headers: {"X-CSRFToken": $("[name='csrfmiddlewaretoken']").val()},data:$(". ...

  7. php7 引用成为一种类型

    <?php $a= ref_count= $b=$a; is_ref= ref_count= $c=&$a; is_ref= ref_count 即a c 共用一个zval, b单独用一 ...

  8. 【洛谷p3994】Highway 二分+斜率优化DP

    题目大意:给你一颗$n$个点的有根树,相邻两个点之间有距离,我们可以从$x$乘车到$x$的祖先,费用为$dis\times P[x]+Q[x]$,问你除根以外每个点到根的最小花费. 数据范围:$n≤1 ...

  9. 【NOI2013】快餐店 环套树+线段树

    题目大意:给你一颗环套树,你要在这棵的边上(包括端点)找一个点,使得离该点最远的点最近. 数据范围:$n≤10^5$,边权$≤10^9$. 此题不难看出一种暴力做法,我们依次断开环上的一条边,然后求整 ...

  10. Python中第三方库的安装

    网上的帖子挺多的,教你如何安装,安装第三方工具库的方法总共分为三类:Dos系统下pip命令:安装包下载安装:IDE集成环境下安装(Pycharm,Spyder……) http://www.jiansh ...