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 ...
随机推荐
- 关于rpm的命令
我是从这里学的:https://www.cnblogs.com/picaso/archive/2012/07/02/2573748.html 软件的安装时操作系统管理的基础,与Windows不同,Li ...
- postgresql-数据库网络地址存储探索
问题背景 数据库审核过程中发现有存储ip的字段类型为varchar(50).想到postgresql有专门的存储ip类型.然而存在即合理.所以主要对比varchar和inet存储ip的不同. 网络地址 ...
- iOS-UIScrollView内容复用【实现两个试图的复用】
前言 这里说的内容复用,是指添加到 ScrollView 里面的试图是同一个模型:比如,我需要在 ScrollView 上添加100个 xkView(其他封装好的VC.UIView),每次滑动 Scr ...
- 【GDKOI2016】 魔卡少女 线段树
题目大意:给你一个长度为n的序列${a_1....a_n}$,有$m$次操作 每次操作有两种情况:修改$a_i$的值,询问$[l,r]$中所有子区间的异或和. 数据范围:$n,m≤10^5$,$a_i ...
- 如何解决jade标签没有闭合,如input
最近用jade模板引擎编写html时发现input编译输出为<input>,而我想要的效果为<input/>, 如何解决呢,这时我们可以这样写: input/ ---& ...
- Openerp负载平衡
来自OpenERP 7.0 带来了许多新特性,架构上也有许多改进.其中可配置 worker 参数,可使 OpenERP 运行在多进程模式,突破GIL的限制,有效利用了现代多核CPU的性能.但默认情况下 ...
- android开发 gradle 总结
gradle结构: MyApp ├── build.gradle ├── settings.gradle └── app └── build.gradle 1. setting.gradle解析 当你 ...
- Android版本分布——2017年5月更新
Code Name Version API Level Last month This month Change gingerbread(姜饼) 2.3.3——2.3.7 10 0.9% 1.0% 0 ...
- 最全面的 Android 编码规范指南
最全面的 Android 编码规范指南 本文word文档下载地址:http://pan.baidu.com/s/1bXT75O 1. 前言 这份文档参考了 Google Java 编程风格规范和 Go ...
- javac之Inferring Type Arguments Based on Actual Arguments
We use the following notational conventions in this section: Type expressions are represented using ...