PoleServiceCollectionExtensions.cs
2.02 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
using Microsoft.Extensions.DependencyInjection;
using Pole.Core;
using Pole.Core.Abstraction;
using Pole.Core.Channels;
using Pole.Core.EventBus;
using Pole.Core.Processor;
using Pole.Core.Processor.Server;
using Pole.Core.Serialization;
using Pole.Core.UnitOfWork;
using Pole.Core.Utils;
using Pole.Core.Utils.Abstraction;
using System;
using System.Collections.Generic;
using System.Text;
namespace Microsoft.Extensions.DependencyInjection
{
public static class PoleServiceCollectionExtensions
{
public static IServiceCollection AddPole(this IServiceCollection services, Action<StartupConfig> config)
{
StartupConfig startupOption = new StartupConfig(services);
if (startupOption.PoleOptionsConfig == null)
{
services.Configure<PoleOptions>(option => { });
}
services.AddSingleton<IEventTypeFinder, EventTypeFinder>();
services.AddTransient(typeof(IMpscChannel<>), typeof(MpscChannel<>));
services.AddScoped<IBus, Bus>();
services.AddScoped<IUnitOfWork, Pole.Core.UnitOfWork.UnitOfWork>();
services.AddSingleton<ISerializer, DefaultJsonSerializer>();
services.AddSingleton<IGeneratorIdSolver, InstanceIPV4_16IdGeneratorIdSolver>();
services.AddSingleton<IObserverUnitContainer, ObserverUnitContainer>();
using (var serviceProvider = services.BuildServiceProvider())
{
var generatorIdSolver = serviceProvider.GetService<IGeneratorIdSolver>();
services.AddSingleton(typeof(ISnowflakeIdGenerator), factory => new SnowflakeIdGenerator(new DateTime(2020, 1, 1), 16, generatorIdSolver.GetGeneratorId()));
}
services.AddSingleton<IProcessor, PendingMessageRetryProcessor>();
services.AddSingleton<IProcessor, ExpiredEventsCollectorProcessor>();
services.AddHostedService<BackgroundServiceBasedProcessorServer>();
config(startupOption);
return services;
}
}
}