zoukankan      html  css  js  c++  java
  • 17,EasyNetQ-替换EasyNetQ组件

    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容器

  • 相关阅读:
    第五次作业
    第四次作业
    Java实验二
    java第一次作业
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
    第七次作业
    第六次作业
  • 原文地址:https://www.cnblogs.com/zd1994/p/8652535.html
Copyright © 2011-2022 走看看