internal IStateManager ResolveStateManager(StateManagerConfiguration stateManagerConfiguration) { var stateManagerKey = stateManagerConfiguration.StateNamespace; if (_resolvedStateManagers.TryGetValue(stateManagerConfiguration.StateNamespace, out var stateManager)) { return(stateManager); } return(CreateAndCacheStateManager(stateManagerConfiguration));; }
private StateManagementMiddleware UseState(StateManagerConfiguration stateManagerConfiguration, Action <StateManagerConfigurationBuilder> configure = null) { if (stateManagerConfiguration == null) { throw new ArgumentNullException(nameof(stateManagerConfiguration)); } configure?.Invoke(new StateManagerConfigurationBuilder(stateManagerConfiguration)); _configuredStateManagers[stateManagerConfiguration.StateNamespace] = stateManagerConfiguration; _autoLoadEnabled = stateManagerConfiguration.AutoLoad; return(this); }
private IStateManager CreateAndCacheStateManager(StateManagerConfiguration stateManagerConfiguration) { if (stateManagerConfiguration == null) { throw new ArgumentNullException(nameof(stateManagerConfiguration)); } if (!_availableStateStores.TryGetValue(stateManagerConfiguration.StateStoreName, out var configuredStateStore)) { if (stateManagerConfiguration.StateManagerType != null) { throw new InvalidOperationException($"State manager of type \"{stateManagerConfiguration.StateManagerType.FullName}\" was configured to use a state store named \"{stateManagerConfiguration.StateStoreName}\", but no such named state store was configured. Please check your middleware configuration."); } throw new InvalidOperationException($"State manager for namespace \"{stateManagerConfiguration.StateNamespace}\" was configured to use a state store named \"{stateManagerConfiguration.StateStoreName}\", but no such named state store was configured. Please check your middleware configuration."); } var stateManager = default(IStateManager); if (stateManagerConfiguration.StateManagerType != null) { if (stateManagerConfiguration.Factory != null) { stateManager = stateManagerConfiguration.Factory(_turnContext, configuredStateStore); } else { try { stateManager = (IStateManager)Activator.CreateInstance(stateManagerConfiguration.StateManagerType, configuredStateStore); } catch (Exception createException) { throw new Exception($"Failed to create an instance of a typed state manager: {stateManagerConfiguration.StateManagerType.FullName}. Please check the inner exception for more details.", createException); } } } else { stateManager = new StateManager(stateManagerConfiguration.StateNamespace, configuredStateStore); } _resolvedStateManagers.Add(stateManagerConfiguration.StateNamespace, stateManager); return(stateManager); }
internal StateManagerConfigurationBuilder(StateManagerConfiguration configuration) { Configuration = configuration; }