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 ...
随机推荐
- linux系统下安装Jenkins
1.首先准备java环境,安装JDK 2.部署jenkins wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redha ...
- Bit Manipulation-476. Number Complement
Given a positive integer, output its complement number. The complement strategy is to flip the bits ...
- java获取当前文件路径的方法
第一种: File f = new File(this.getClass().getResource("/").getPath()); System.out.println(f); ...
- [Auto Testing] 工具准备:Selenium 与 ChromeDriver
<留存> Selenium http://selenium-release.storage.googleapis.com/index.html https://www.seleniumhq ...
- Lingo 做线性规划 - Operation Management Applications
Reference: <An Introduction to Management Science Quantitative Approaches to Decision Making, Rev ...
- keepalived安装配置实战心得(实现高可用保证网络服务不间断)
keepalived安装配置实战心得(实现高可用保证网络服务不间断) 一.准备2台虚拟机 安装的系统是:centos-release-7-1.1503.el7.centos.2.8.x86_6 ...
- deepin安装Mariadb后,登录时出现ERROR 1045 (28000): Access denied for user 'root'@'localhost'
安装Mariadb的时候设置了root密码,但是登录的时候出现了这样的提示 这里记录下我的处理方法.我是用的如果重置root密码的套路. 首先,在/etc/mysql/mariadb.conf.d/5 ...
- 快速初步了解Neo4j与使用
快速初步了解Neo4j与使用 Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化 ...
- 第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析
关于spring中的validate注解后台校验的解析 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判 ...
- 搭建hadoop_之 创建3个虚拟机配置好网络
(创建3个虚拟机,1个作为主服务器,二个作为从节点) 一.安装虚拟机 Windwos:VMware Workstation Pro MAC:VMware Fusion 安装: ** 创建空 ...