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 ...
随机推荐
- Django 框架中定时触发脚本
方法一: Django搭建的服务器一般都用作WEB网站进行访问,通常的形式是用户访问网站或点击按钮发送请求,Django检测到请求后进行相应的试图函数处理后返回页面给用户. 但是,我们有时会需要有一些 ...
- Design-341. Flatten Nested List Iterator
Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...
- C/C++ 语言 Hello world
#include <stdio.h> void main() { int x,i; ; scanf("%d",&x); if(x>y) printf(&q ...
- 七,mysql优化——表的垂直划分和水平划分
1,表的水平划分 如果一个表的记录数太多,比如成千上万条,而且需要经常检索,那么我们有必要化整为零.如果我拆成100个表,那么每个表只有10万条记录.当然需要数据在逻辑上可以划分.一个好的划分依据,有 ...
- 浅谈Express的put与del
假设有一个景区价格列表页,显示当前的价目表. 价目表存放在express应用的数组中: var tours = [ {id:0,name:'Hood River',price:99.99}, {id: ...
- 多线程学习:Volatile与Synchronized的区别、什么是重排序
java线程的内存模型 java的线程内存模型中定义了每个线程都有一份自己的共享变量副本(本地内存),里面存放自己私有的数据,其他线程不能直接访问,而一些共享变量则存在主内存中,供所有线程访问. 上图 ...
- #阿里云#云服务器部署可道云(KodExplorer)
前言:在做一些项目的时候,经常有一些文档交流,修改之后的文档在QQ或微信上发来发去,还要下载,很是不爽,有一个挺有用的东西叫做KodExplorer可道云. kodexplorer可道云是目前国内有代 ...
- 剑指offer三十二之把数组排成最小的数
一.题目 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 二.思路 ( ...
- hive与hbase的整合
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点学习成本低,可以通过类S ...
- (转) mysql之status和variables区别及用法详解
原文:http://blog.csdn.net/andyzhaojianhui/article/details/50052117