private PersistentSubscription(IPersistentSubscriptionsClient persistentSubscriptionsClient,
                                       PersistentSubscriptionDetails persistentSubscriptionDetails,
                                       IDomainEventHandlerResolver domainEventHandlerResolver,
                                       String username,
                                       String password)
        {
            this.PersistentSubscriptionsClient = persistentSubscriptionsClient;
            this.PersistentSubscriptionDetails = persistentSubscriptionDetails;
            UserCredentials userCredentials = new(username, password);

            Func <global::EventStore.Client.PersistentSubscription, ResolvedEvent, Int32?, CancellationToken, Task> eventAppeared = (ps, re, retryCount, ct) => PersistentSubscription.EventAppeared(ps, re, retryCount, domainEventHandlerResolver, ct);

            this.Subscribe = ct => persistentSubscriptionsClient.SubscribeAsync(this.PersistentSubscriptionDetails.StreamName,
                                                                                this.PersistentSubscriptionDetails.GroupName,
                                                                                eventAppeared,
                                                                                this.SubscriptionDropped,
                                                                                userCredentials,
                                                                                persistentSubscriptionDetails.InflightMessages,
                                                                                ct);
        }
 public static PersistentSubscription Create(IPersistentSubscriptionsClient persistentSubscriptionsClient,
                                             PersistentSubscriptionDetails persistentSubscriptionDetails,
                                             IDomainEventHandlerResolver domainEventHandlerResolver,
                                             String username = "******",
                                             String password = "******") => new(persistentSubscriptionsClient, persistentSubscriptionDetails, domainEventHandlerResolver, username, password);