Rafy中的IOC
Rafy是什么可以通过下面博客来了解
Rafy 领域实体框架演示(3) - 快速使用 C/S 架构部署 - BloodyAngel - 博客园
以下是看源码中的一点记录,供以后学习使用
主要是Rafy中IOC容器的定义,实现方式,用法
下面先看一个图:

这个图片包含,三个方面的内容
- 以Composer为核心的组件组合器,实现组件间通信。
- 以IEventBus为核心的事件总线发布订阅机制。
- 以IObjectContainer为核心的IOC容器。
下面主要从IObjectContainer 接口开始
该接口,主要提供两大方面的功能
- 注册。
- 获取。
详细接口如下:
/// <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里面是怎么控制的

这个里面比较简单
- 一个工厂接口的私有变量,来存储具体的容器工厂。
- 一个CreateContainer方法创建独立的容器
- 一个SetProvider方法,这个方法是什么鬼,好像没有它,我们就没法替换自己需要的IOC容器了,来具体看一下:
原来它只是把默认的工厂给替换掉了。

那如果我们也想用自己的工厂,替换自己的IOC容器,知道该怎么做了没有呢
首先
- 我们要实现 IObjectContainerFactory 这个工厂接口。
- 然后在合适的时机,调用SetProvider这个方法,这样就可以实现容器替换了。
Rafy中的IOC的更多相关文章
- Rafy中的EventBus
EventBus主要是干嘛使的,直接翻译叫事件总线. 是观察者模型的实现,利用它你既可以实现观察者模型的业务场景,还可以基于它的事件驱动机制来实现应用程序内组件之间的解耦与通信. 我们来看看有Even ...
- Android 进阶 Android 中的 IOC 框架 【ViewInject】 (下)
上一篇博客我们已经带大家简单的吹了一下IoC,实现了Activity中View的布局以及控件的注入,如果你不了解,请参考:Android 进阶 教你打造 Android 中的 IOC 框架 [View ...
- spring.net中的IOC和DI-初使用
前面准备:下载spring.net并解压 下载地址:spring.net下载地址 Ioc:控制反转 DI:依赖注入 一.IOC(控制反转) 1.新建一个控制台程序springTest, ...
- Castle框架中的IOC和AOP机制
反转控制(IOC)和面向切面编程(AOP)技术作为当前比较流行的技术,其优势已受到广泛关注,但是这两项新技术在实际项目上的应用研究却很落后,而且在.NET平台下实现这两项技术没有形成可以广泛套用的框架 ...
- Spring——Web应用中的IoC容器创建(WebApplicationContext根应用上下文的创建过程)
基于Spring-4.3.7.RELEASE Spring的配置不仅仅局限在XML文件,同样也可以使用Java代码来配置.在这里我使用XML配置文件的方式来粗略地讲讲WebApplicationCon ...
- ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)
前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 目录 ...
- ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)
前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 目录 ...
- ASP.NET Core中使用IOC三部曲(三.采用替换后的Autofac来实现AOP拦截)
前言 本文主要是详解一下在ASP.NET Core中,采用替换后的Autofac来实现AOP拦截 觉得有帮助的朋友~可以左上角点个关注,右下角点个推荐 这里就不详细的赘述IOC是什么 以及DI是什么了 ...
- Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下)
上一篇博客我们已经带大家简单的吹了一下IoC,实现了Activity中View的布局以及控件的注入,如果你不了解,请参考:Android 进阶 教你打造 Android 中的 IOC 框架 [View ...
随机推荐
- Ubuntu18.04 - 返回到Gnome经典桌面!
Ubuntu18.04默认的桌面是定制版的Gnome,说实话,真的不喜欢,还是喜欢Gnome的经典桌面,那么如何进入呢?执行下面命令,执行完毕后注销,选择一下就可以了! sudo apt-get in ...
- CentOS 7 - 最小化安装以及引发的问题!
一,操作系统和虚拟机 操作系统:CentOS 7 官方网站:https://www.centos.org 下载地址:https://www.centos.org/download/ 下载版本分三个:D ...
- uiautomator2 手工翻译版
原文:https://github.com/openatx/uiautomator2 1.安装 pip install --pre uiautomator2 #或者你可以直接从github源码安装 ...
- Xshell多版本被曝存在后门,了解紧急响应修复预案
近日,Xshell远程终端工具被爆出多个版本存在后门,无疑是安全圈的一个大新闻.恶意攻击者利用该后门可以收集到用户名密码等主机敏感信息,并将之传回攻击者的机器,导致服务器信息泄露,进一步可致使整个服务 ...
- iOS开发总结--三方平台开发之微信支付
1.前言 现在很多应用都有支付功能,支付也是开发中比较麻烦的一个部分.其实,最麻烦的部分是商户帐号的审核,如果没有商户帐号,就没有你要给钱的那个对公账户. 2.关于交易 在这个金融类项目的开发中,接触 ...
- python学习笔记07-元组 字典
元组: 元组里面的元素不可修改 创建后只可读 不可写 一个元素的时候 在后面加一个逗号 字典: 无序的 Python 中唯一的映射类型 采用键值对的形式存储数据 key必须是可哈希的 可哈希表示 ...
- Ajax与XMLHttpRequest随笔
1.XMLHttpRequest对象 创建XHR对象:let xhr = new XMLHttpRequest(); open():启动一个请求准备发送 open()接收3个参数:请求类型('GET' ...
- 数据结构---散列表查找(哈希表)概述和简单实现(Java)
散列表查找定义 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,是的每个关键字key对应一个存储位置f(key).查找时,根据这个确定的对应关系找到给定值的key的对应f(key) ...
- Java之IO(五)文件系统
转载请注明源出处:http://www.cnblogs.com/lighten/p/6992043.html 1.前言 在讲解Java的文件流之前,先来认识一下Java的文件系统的实现.值得一提的是, ...
- Tomcat性能调优-让小猫飞奔
一.总结前一天的学习 从“第三天”的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü 吞吐量 ü Responsetime ü Cpuload ü MemoryUsa ...