private static void ShouldBeSingleInstance <TService>(ISlackServiceProvider sut, Func <ISlackServiceProvider, TService> getService, TService service) where TService : class { getService(sut).ShouldBe(service); getService(sut).ShouldBe(service, "Should be same instance"); DuringRequest(sut, _ => getService(sut).ShouldBe(service, "Should be same instance during request")); }
public SlackRequestContextPopulator( ISlackServiceProvider serviceProvider, IReadOnlyCollection <Func <SlackRequestContext, IEventHandler> > eventHandlers, IReadOnlyCollection <Func <SlackRequestContext, IAsyncBlockActionHandler> > blockActionHandlers, IReadOnlyDictionary <string, Func <SlackRequestContext, IBlockOptionProvider> > blockOptionProviders, IReadOnlyCollection <Func <SlackRequestContext, IAsyncMessageShortcutHandler> > messageShortcutHandlers, IReadOnlyCollection <Func <SlackRequestContext, IAsyncGlobalShortcutHandler> > globalShortcutHandlers, IReadOnlyDictionary <string, Func <SlackRequestContext, IAsyncViewSubmissionHandler> > viewSubmissionHandlers, IReadOnlyDictionary <string, Func <SlackRequestContext, IAsyncSlashCommandHandler> > slashCommandHandlers, IReadOnlyCollection <Func <SlackRequestContext, IAsyncWorkflowStepEditHandler> > workflowStepEditHandlers, IReadOnlyDictionary <string, Func <SlackRequestContext, IInteractiveMessageHandler> > legacyInteractiveMessageHandlers, IReadOnlyDictionary <string, Func <SlackRequestContext, IOptionProvider> > legacyOptionProviders, IReadOnlyDictionary <string, Func <SlackRequestContext, IDialogSubmissionHandler> > legacyDialogSubmissionHandlers) { _serviceProvider = serviceProvider; _eventHandlers = eventHandlers; _blockActionHandlers = blockActionHandlers; _blockOptionProviders = blockOptionProviders; _messageShortcutHandlers = messageShortcutHandlers; _globalShortcutHandlers = globalShortcutHandlers; _viewSubmissionHandlers = viewSubmissionHandlers; _slashCommandHandlers = slashCommandHandlers; _workflowStepEditHandlers = workflowStepEditHandlers; _legacyInteractiveMessageHandlers = legacyInteractiveMessageHandlers; _legacyOptionProviders = legacyOptionProviders; _legacyDialogSubmissionHandlers = legacyDialogSubmissionHandlers; }
public SlackServiceProvider( Func <ISlackServiceProvider, IHttp> httpProvider, Func <ISlackServiceProvider, SlackJsonSettings> jsonSettingsProvider, Func <ISlackServiceProvider, ISlackTypeResolver> slackTypeResolverProvider, Func <ISlackServiceProvider, ISlackUrlBuilder> urlBuilderProvider, Func <ISlackServiceProvider, ILogger> loggerProvider, Func <ISlackServiceProvider, IWebSocketFactory> webSocketFactoryProvider, IReadOnlyCollection <Func <ISlackServiceProvider, ISlackRequestListener> > requestListenerProviders, Func <ISlackServiceProvider, ISlackHandlerFactory> handlerFactoryProvider, Func <ISlackServiceProvider, ISlackApiClient> apiClientProvider, Func <ISlackServiceProvider, ISlackSocketModeClient> socketModeClientProvider, ISlackServiceProvider dependencyProvider = null) { dependencyProvider ??= this; _http = new Lazy <IHttp>(() => httpProvider(dependencyProvider)); _jsonSettings = new Lazy <SlackJsonSettings>(() => jsonSettingsProvider(dependencyProvider)); _slackTypeResolver = new Lazy <ISlackTypeResolver>(() => slackTypeResolverProvider(dependencyProvider)); _urlBuilder = new Lazy <ISlackUrlBuilder>(() => urlBuilderProvider(dependencyProvider)); _logger = new Lazy <ILogger>(() => loggerProvider(dependencyProvider)); _webSocketFactory = new Lazy <IWebSocketFactory>(() => webSocketFactoryProvider(dependencyProvider)); _requestListeners = requestListenerProviders.Select(p => p(dependencyProvider)); _handlerFactory = new Lazy <ISlackHandlerFactory>(() => handlerFactoryProvider(dependencyProvider)); _apiClient = new Lazy <ISlackApiClient>(() => apiClientProvider(dependencyProvider)); _socketModeClient = new Lazy <ISlackSocketModeClient>(() => socketModeClientProvider(dependencyProvider)); }
private void HandleInRequest <THandler, TInput>(ISlackServiceProvider services, Func <ISlackHandlerFactory, SlackRequestContext, THandler> createHandler, Action <THandler, TInput> handle, TInput[] inputs) { DuringRequest(services, ctx => { var handler = createHandler(services.GetHandlerFactory(), ctx); foreach (var input in inputs) { handle(handler, input); } }); }
private static void RequestListenersShouldBeCreatedOnEnumeration(ISlackServiceProvider sut, InstanceTracker instanceTracker) { var listeners = sut.GetRequestListeners(); instanceTracker.GetInstances <TestRequestListener>().ShouldBeEmpty("Listeners should not be created until enumerated"); var expectedListeners = new[] { listeners.Last(), listeners.Last() }; var createdInstances = instanceTracker.GetInstances <TestRequestListener>().Cast <ISlackRequestListener>(); createdInstances.ShouldMatchReferences(expectedListeners, "Listeners should be created once per enumeration"); }
protected static void DuringRequest(ISlackServiceProvider services, Action <SlackRequestContext> duringRequest) { var requestContext = new SlackRequestContext(); var requestScope = requestContext.BeginRequest(services.GetRequestListeners()); try { duringRequest(requestContext); } finally { requestScope.DisposeAsync().AsTask().ShouldComplete(); } }
protected void HandleViewCloses(ISlackServiceProvider services, Responder responder, ViewClosed[] closes) => HandleInRequest(services, (hf, ctx) => hf.CreateViewSubmissionHandler(ctx), (h, c) => h.HandleClose(c, responder), closes);
protected void HandleLegacyDialogCancellations(ISlackServiceProvider services, DialogCancellation[] cancellations) => HandleInRequest(services, (hf, ctx) => hf.CreateLegacyDialogSubmissionHandler(ctx), (h, c) => h.HandleCancel(c), cancellations);
public ServiceProviderSlackServiceProvider(Func <ISlackServiceProvider, ISlackServiceProvider> createBaseProvider, IServiceProvider serviceProvider) { _baseProvider = createBaseProvider(this); _serviceProvider = serviceProvider; }
protected void HandleLegacyOptionsRequest(ISlackServiceProvider services, OptionsRequest[] requests) => HandleInRequest(services, (hf, ctx) => hf.CreateLegacyOptionProvider(ctx), (h, r) => h.GetOptions(r), requests);
protected void HandleLegacyDialogSubmissions(ISlackServiceProvider services, DialogSubmission[] submissions) => HandleInRequest(services, (hf, ctx) => hf.CreateLegacyDialogSubmissionHandler(ctx), (h, s) => h.Handle(s), submissions);
protected void HandleWorkflowStepEdits(ISlackServiceProvider services, Responder responder, WorkflowStepEdit[] edits) => HandleInRequest(services, (hf, ctx) => hf.CreateWorkflowStepEditHandler(ctx), (h, e) => h.Handle(e, responder), edits);
protected void HandleLegacyInteractiveMessages(ISlackServiceProvider services, InteractiveMessage[] messages) => HandleInRequest(services, (hf, ctx) => hf.CreateLegacyInteractiveMessageHandler(ctx), (h, m) => h.Handle(m), messages);
public AutofacSlackServiceProvider(Func <ISlackServiceProvider, ISlackServiceProvider> createBaseProvider, ILifetimeScope scope) { _baseProvider = createBaseProvider(this); _scope = scope; }
protected void HandleEvents(ISlackServiceProvider services, EventCallback[] eventCallbacks) => HandleInRequest(services, (hf, ctx) => hf.CreateEventHandler(ctx), (h, e) => h.Handle(e), eventCallbacks);
protected void HandleViewSubmissions(ISlackServiceProvider services, Responder <ViewSubmissionResponse> responder, ViewSubmission[] submissions) => HandleInRequest(services, (hf, ctx) => hf.CreateViewSubmissionHandler(ctx), (h, s) => h.Handle(s, responder), submissions);
protected void HandleGlobalShortcuts(ISlackServiceProvider services, Responder responder, GlobalShortcut[] shortcuts) => HandleInRequest(services, (hf, ctx) => hf.CreateGlobalShortcutHandler(ctx), (h, s) => h.Handle(s, responder), shortcuts);
protected void HandleBlockActions(ISlackServiceProvider services, Responder responder, BlockActionRequest[] requests) => HandleInRequest(services, (hf, ctx) => hf.CreateBlockActionHandler(ctx), (h, r) => h.Handle(r, responder), requests);
protected void HandleSlashCommands(ISlackServiceProvider services, Responder <SlashCommandResponse> responder, SlashCommand[] commands) => HandleInRequest(services, (hf, ctx) => hf.CreateSlashCommandHandler(ctx), (h, c) => h.Handle(c, responder), commands);
public SimpleInjectorSlackServiceProvider(Func <ISlackServiceProvider, ISlackServiceProvider> createBaseProvider, Container container) { _baseProvider = createBaseProvider(this); _container = container; }