private static OmegaBuilder AddOmegaCore([NotNull] this IServiceCollection services, Action <OmegaOptions> options, string servcie)
        {
            var builder = new OmegaBuilder(services);

            builder.AddHosting(options).AddDiagnostics().AddHttpClient();
            return(builder);
        }
        public static OmegaBuilder AddHosting(this OmegaBuilder builder, Action <OmegaOptions> options)
        {
            builder.Services.AddSingleton <IHostedService, OmegaHostedService>();
            builder.Services.AddSingleton <IMessageSerializer, JsonMessageFormat>();
            builder.Services.AddSingleton <IDiagnosticItercept, HostingDiagnosticIntercept>();
            builder.Services.AddSingleton <ILoggerFactory, NullLoggerFactory>();
            builder.Services.AddSingleton(typeof(IIdGenerator <string>), typeof(UniqueIdGenerator));
            builder.Services.AddSingleton <IMessageHandler, CompensationMessageHandler>();
            builder.Services.AddSingleton <IRecoveryPolicy, DefaultRecovery>();
            builder.Services.AddSingleton <OmegaContext>();
            builder.Services.AddSingleton <CompensationContext>();
            builder.Services.AddSingleton <SagaStartAttribute>();
            var option = new OmegaOptions();

            options(option);
            builder.Services.AddSingleton <IMessageSender>(new GrpcClientMessageSender(
                                                               new GrpcServiceConfig
            {
                InstanceId  = option.InstanceId,
                ServiceName = option.ServiceName
            },
                                                               new Channel(option.GrpcServerAddress, ChannelCredentials.Insecure),
                                                               new JsonMessageFormat(),
                                                               option.GrpcServerAddress
                                                               ));

            builder.Services.AddSingleton <IEventAwareInterceptor, SagaStartAnnotationProcessor>();
            builder.Services.AddSingleton <IEventAwareInterceptor, CompensableInterceptor>();
            builder.Services.AddSingleton <ISagaStartEventAwareInterceptor>(services =>
                                                                            new SagaStartAnnotationProcessor(services.GetService <OmegaContext>(), services.GetService <IMessageSender>()));

            return(builder);
        }
        public static OmegaBuilder AddHttpClient([NotNull] this OmegaBuilder builder)
        {
            builder.Services.AddSingleton <IDiagnosticItercept, HttpClientDiagnosticIntercept>();

            return(builder);
        }
 public static OmegaBuilder AddDiagnostics(this OmegaBuilder builder)
 {
     builder.Services.AddSingleton <DiagnosticListenerObserver>();
     return(builder);
 }