EasyNetQ是一个由小型组件组成的库。 当你写:

var bus = RabbitHutch.CreateBus("host=localhost");

...静态方法CreateBus使用一个微小的内部IoC容器来组装这些组件。 CreateBus方法的重载允许您访问组件注册,以便您可以提供您自己的任何EasyNetQ依赖关系的版本。 签名看起来像这样:

public static IBus CreateBus(string connectionString, Action<IServiceRegister> registerServices)

IServiceRegister接口提供了一种方法:

public interface IServiceRegister
{
IServiceRegister Register<TService>(Func<IServiceProvider, TService> serviceCreator) where TService : class;
}

因此,要基于IEasyNetQLogger注册您自己的记录器,您需要编写以下代码:

IEasyNetQLogger logger = new MyLogger(); // note the use of IEasyNetQLogger not var.
var bus = RabbitHutch.CreateBus(connectionString,
serviceRegister => serviceRegister.Register(serviceProvider => logger));

Register方法的参数Func <IServiceProvider,TService>是一个函数,它在CreateBus将这些组件拉到一起以生成一个IBus实例时运行。 IServiceProvider看起来像这样:

public interface IServiceProvider
{
TService Resolve<TService>() where TService : class;
}

这使您可以访问EasyNetQ提供的其他服务。 例如,如果您想用您自己的ISerializer实现来替换默认的序列化程序,并且想要通过引用记录器来构建它,则可以这样做:

var bus = RabbitHutch.CreateBus(connectionString, serviceRegister =>
serviceRegister.Register<ISerializer>(
serviceProvider => new MySerializer(serviceProvider.Resolve<IEasyNetQLogger>())));

请注意,我们必须在Register方法上使用明确的类型参数,以便内部IoC容器知道我们正在替换哪个服务。

要查看组成IBus实例的组件的完整列表,以及它们的组装方式,请查看ComponentRegistration类。

您可以通过IAdvancedBus的Container属性访问容器。 这使您可以访问内部组件:

var serializer = bus.Advanced.Container.Resolve<ISerializer>();

要用您自己选择的IoC容器替换内部容器,请参阅使用替代DI容器

17,EasyNetQ-替换EasyNetQ组件的更多相关文章

  1. 第17讲- UI常用组件之ImageView图片浏览

    第17讲 UI常用组件之ImageView图片浏览 二.图片浏览ImageView ImageView就是一个用来显示图片的视图: ImageView常见属性 常见属性 对应方法 说明 android ...

  2. Angular之替换根组件

    一 在index.html中,替换根组件选择器 <!doctype html> <html lang="en"> <head> <meta ...

  3. Flutter实战视频-移动电商-17.首页_楼层组件的编写技巧

    17.首页_楼层组件的编写技巧 博客地址: https://jspang.com/post/FlutterShop.html#toc-b50 楼层的效果: 标题 stlessW快速生成: 接收一个St ...

  4. Abp Vnext Blazor替换UI组件 集成BootstrapBlazor(详细过程)

    Abp Vnext自带的blazor项目使用的是 Blazorise,但是试用后发现不支持多标签.于是想替换为BootstrapBlazor. 过程比较复杂,本人已经把模块写好了只需要替换掉即可. 点 ...

  5. vue.js(17)--vue的组件切换

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. activiti-explore(activiti5.17) 替换数据库

    http://blog.csdn.net/xiangwangye66/article/details/46943301

  7. 简单易用的.NET免费开源RabbitMQ操作组件EasyNetQ解析

    对于目前大多的.NET项目,其实使用的技术栈都是差不多,估计现在很少用控件开发项目的了,毕竟一大堆问题.对.NET的项目,目前比较适合的架构ASP.NET MVC,ASP.NET WebAPI,ORM ...

  8. 使用EasyNetQ组件操作RabbitMQ消息队列服务

    RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...

  9. .NetCore中简单使用EasyNetQ

    前言 我们在.Net中使用RabbitMQ,最原始的就是基于RabbitMQ.Client进行编码,在这个过程中我们需要通过代码约定和维护队列,Exchange等.如果是自行编码封装通用型的Rabbi ...

  10. EasyNetQ介绍

    EasyNetQ 是一个容易使用,坚固的,针对RabbitMQ的 .NET API. 假如你尽可能快的想去安装和运行RabbitMQ,请去看入门指南.EasyNetQ是为了提供一个尽可能简洁的适用与R ...

随机推荐

  1. escape、encodeURI和encodeURIComponent的区别

    1.简单解释 简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读. 编码之后的效果是%XX或者%uXXXX这种形式. 其中 ASCII字母. ...

  2. ppt 制作圆角三角形

    制作圆角三角形: PART 01 :插入三角形与三个等大的圆形: PART 02 :利用[任意多边形]和[合并形状-剪除]获得缺三角: (先选中大三角形,然后再选中任意多边形,"格式&quo ...

  3. 关于nginx报错/usr/share/nginx/html/jiankongshare" failed (2: No such file or directory)的问题解决

    nginx的location虚拟目录配置: monitor.conf server {       server_name   monitor.chinasoft.com;       server_ ...

  4. centos6.5下系统编译定制iptables防火墙扩展layer7应用层访问控制功能及应用限制QQ2016上网

    iptables防火墙扩展之layer7应用层访问控制 概述: iptables防火墙是工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙.以基于网络层的数据包过滤机制为主,同 ...

  5. centos6中创建软raid方法

    raid概述: 组建raid阵列命令: mdadm:模式化的工具 /etc/mdadm.conf     -A  Assemble 装配模式     -C  Create 创建模式     -C:专用 ...

  6. IDEA运行TestNG报错rg.testng.TestNGException: org.xml.sax.SAXParseException;

    从eclipse复制的依赖注解,一运行测试脚本发现报错如下: "F:\Program Files\Java\jdk1.7.0_17\bin\java" -ea -Didea.lau ...

  7. 解决Javascript中$(window).resize()多次执行

    有些时候,我们需要在浏览器窗口发生变化的时候,动态的执行一些操作,比如做自适应页面时的适配.这个时候,我们需要在窗口拖动的时候去执行代码.但是有些时候,执行的操作比较复杂,我们只希望在窗口拖动完毕之后 ...

  8. 石头剪刀布(智能判断你是否赢了)(if判断和for)

  9. win10下vscode配置sftp

    sftp配置 1.在vscode中下载sftp插件 在vscode中快捷键 ctrl+shift+P 打开指令窗口,输入extension:install,回车,左侧即打开扩展安装的界面  在搜索框中 ...

  10. 如何通过编译Linux内核打开IPVS(LVS)的debug模式

    前言 为了定位keepalived VIP的问题, 一步一步定位到IPVS, IPVS默认是没有打开Debug模式的, 若需要打开Debug模式需要重新编译IPVS模块加载后才行, 最好的方式当然是仅 ...