protected override void Setup(FeatureConfigurationContext context)
    {
        context.Settings.EnableFeature<StorageType.Sagas>();

        var settings = context.Settings;
        var endpointName = settings.GetTablePrefix<StorageType.Sagas>();
        var sqlVarient = settings.GetSqlVarient();
        var commandBuilder = new SagaCommandBuilder(sqlVarient,endpointName);
        var jsonSerializerSettings = SagaSettings.GetJsonSerializerSettings(settings);
        var jsonSerializer = BuildJsonSerializer(jsonSerializerSettings);
        var readerCreator = SagaSettings.GetReaderCreator(settings);
        if (readerCreator == null)
        {
            readerCreator = reader => new JsonTextReader(reader);
        }
        var writerCreator = SagaSettings.GetWriterCreator(settings);
        if (writerCreator == null)
        {
            writerCreator = writer => new JsonTextWriter(writer);
        }
        var versionDeserializeBuilder = SagaSettings.GetVersionSettings(settings);
        var infoCache = new SagaInfoCache(versionDeserializeBuilder, jsonSerializer, readerCreator, writerCreator, commandBuilder);
        var sagaPersister = new SagaPersister(infoCache);
        context.Container.ConfigureComponent<ISagaPersister>(() => sagaPersister, DependencyLifecycle.SingleInstance);
    }
 public SagaInfoCache(
     RetrieveVersionSpecificJsonSettings versionSpecificSettings,
     JsonSerializer jsonSerializer,
     Func<TextReader, JsonReader> readerCreator,
     Func<TextWriter, JsonWriter> writerCreator,
     SagaCommandBuilder commandBuilder)
 {
     this.versionSpecificSettings = versionSpecificSettings;
     this.writerCreator = writerCreator;
     this.readerCreator = readerCreator;
     this.jsonSerializer = jsonSerializer;
     this.commandBuilder = commandBuilder;
 }