using Microsoft.Extensions.DependencyInjection; using Raven.Client.Documents; using Raven.Client.Http; namespace zero.Persistence; internal class PersistenceModule : ZeroModule { /// public override void Register(IZeroModuleConfiguration config) { config.Services.AddSingleton(); config.Services.AddSingleton(CreateRavenStore); config.Services.AddScoped(); config.Services.AddScoped(); } /// public override void Configure(IZeroOptions options) { base.Configure(options); } /// /// Creates and configures the raven store /// protected ZeroDocumentStore CreateRavenStore(IServiceProvider services) { IZeroOptions options = services.GetService(); IZeroDocumentConventionsBuilder conventionsBuilder = services.GetService(); IZeroDocumentStore store = new ZeroDocumentStore(options) { Urls = new string[1] { options.Raven.Url }, Conventions = // TODO activate and test this { AggressiveCache = { Duration = TimeSpan.FromHours(1), Mode = AggressiveCacheMode.TrackChanges } } }; conventionsBuilder.Run(store.Conventions); IDocumentStore raven = store.Initialize(); // create all indexes if (options.SetupCompleted) { //var indexes = options.Raven.Indexes.BuildAll(options, store); //IndexCreation.CreateIndexes(indexes, store, database: options.Raven.Database); } return (ZeroDocumentStore)raven; } }