Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

丁松杰 / Pole

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Members
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Files
  • Commits
  • Branches
  • Tags
  • Contributors
  • Graph
  • Compare
  • Charts
Switch branch/tag
  • Pole
  • src
  • Pole.ReliableMessage
  • PoleReliableMessageServiceCollectionE...
Find file
BlameHistoryPermalink
  • dingsongjie's avatar
    完善 可靠消息 · 450dd303
    dingsongjie committed 5 years ago
    450dd303
PoleReliableMessageServiceCollectionExtensions.cs 3.4 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
using Pole.Pole.ReliableMessage.EventBus;
using Pole.ReliableMessage;
using Pole.ReliableMessage.Abstraction;
using Pole.ReliableMessage.EventBus;
using Pole.ReliableMessage.Messaging;
using Pole.ReliableMessage.Messaging.CallBack;
using Pole.ReliableMessage.Processor;
using Pole.ReliableMessage.Utils;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace Microsoft.Extensions.DependencyInjection
{
    public static class PoleReliableMessageServiceCollectionExtensions
    {
        public static IServiceCollection AddPoleReliableMessage(this IServiceCollection  services, Action<ReliableMessageOption> optionConfig)
        {
            ReliableMessageOption reliableMessageOption = new ReliableMessageOption();
            optionConfig(reliableMessageOption);

            foreach(var extension in reliableMessageOption.ReliableMessageOptionExtensions)
            {
                extension.AddServices(services);
            }
            services.Configure(optionConfig);

            services.AddSingleton<IJsonConverter, DefaultJsonConverter>();
            //services.AddSingleton<IMessageBuffer, DefaultMessageBuffer>();
            services.AddSingleton<IMessageCheckRetryer, DefaultMessageCheckRetryer>();
            services.AddSingleton<IRetryTimeDelayCalculator, DefaultRetryTimeDelayCalculator>();
            services.AddSingleton<ITimeHelper, DefaulTimeHelper>();
            services.AddSingleton<IApplicationBuilderConfigurator, DefaultApplicationBuilderConfigurator>();
            services.AddSingleton<IComteckReliableMessageBootstrap, DefaultComteckReliableMessageBootstrap>();
            services.AddSingleton<IMessageCallBackInfoGenerator, DefaultMessageCallBackInfoGenerator>();
            services.AddSingleton<IMessageCallBackInfoStore, MessageCallBackInfoInMemoryStore>();
            services.AddSingleton<IMessageCallBackRegister, DefaultMessageCallBackRegister>();
            services.AddSingleton<IMessageChecker, DefaultMessageChecker>();
            services.AddSingleton<IMessageCallBackInfoGenerator, DefaultMessageCallBackInfoGenerator>();
            services.AddSingleton<IReliableBus, DefaultReliableBus>();
            services.AddSingleton<IReliableEventCallBackFinder, DefaultReliableEventCallBackFinder>();
            services.AddSingleton<IReliableEventHandlerFinder, DefaultReliableEventHandlerFinder>();
            services.AddSingleton<IMessageTypeIdGenerator, DefaultMessageTypeIdGenerator>();
            services.AddSingleton<IServiceIPv4AddressProvider, DefaultServiceIPv4AddressProvider>();

            services.AddHostedService<BackgroundServiceBasedProcessorServer>();

            services.AddHttpClient();




            services.AddSingleton<IProcessor, MessageCleanProcessor>();
            services.AddSingleton<IProcessor, PendingMessageCheckProcessor>();
            services.AddSingleton<IProcessor, PendingMessageServiceInstanceCheckProcessor>();

            var provider = services.BuildServiceProvider();

            IComteckReliableMessageBootstrap applicationBuilderConfigurator = provider.GetService(typeof(IComteckReliableMessageBootstrap)) as IComteckReliableMessageBootstrap;

            applicationBuilderConfigurator.Initialize(services, reliableMessageOption.EventHandlerAssemblies, reliableMessageOption.EventCallbackAssemblies);
            return services; 
        }     
    }
}