Files
mixtape/zero.Core/Persistence/ZeroPersistenceModule.cs
T

55 lines
1.8 KiB
C#
Raw Normal View History

2021-11-24 15:49:25 +01:00
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
2021-11-19 14:59:24 +01:00
using Raven.Client.Documents;
using Raven.Client.Http;
2021-11-20 13:52:28 +01:00
namespace zero.Persistence;
2021-11-19 14:59:24 +01:00
2022-01-06 18:10:58 +01:00
internal class ZeroPersistenceModule : ZeroModule
2021-11-19 14:59:24 +01:00
{
2021-11-30 14:32:10 +01:00
public override void ConfigureServices(IServiceCollection services, IConfiguration configuration)
2021-11-19 14:59:24 +01:00
{
2021-11-23 22:56:22 +01:00
services.AddSingleton<IZeroDocumentConventionsBuilder, ZeroDocumentConventionsBuilder>();
services.AddSingleton<IZeroDocumentStore, ZeroDocumentStore>(CreateRavenStore);
services.AddScoped<IZeroStore, ZeroStore>();
services.AddScoped<IZeroTokenProvider, ZeroTokenProvider>();
2021-11-27 18:09:27 +01:00
services.AddScoped<IRevisionService, RevisionService>();
2021-11-24 15:49:25 +01:00
2021-11-30 14:32:10 +01:00
services.AddOptions<RavenOptions>().Bind(configuration.GetSection("Zero:Raven"));
2021-11-19 14:59:24 +01:00
}
/// <summary>
/// Creates and configures the raven store
/// </summary>
2021-11-30 14:32:10 +01:00
protected ZeroDocumentStore CreateRavenStore(IServiceProvider services)
2021-11-19 14:59:24 +01:00
{
IZeroOptions options = services.GetService<IZeroOptions>();
IZeroDocumentConventionsBuilder conventionsBuilder = services.GetService<IZeroDocumentConventionsBuilder>();
IZeroDocumentStore store = new ZeroDocumentStore(options)
{
2021-11-22 14:29:22 +01:00
Urls = new string[1] { options.For<RavenOptions>().Url },
2021-11-23 11:35:01 +01:00
Conventions =
{
AggressiveCache =
2021-11-19 14:59:24 +01:00
{
2021-11-23 11:35:01 +01:00
Duration = TimeSpan.FromHours(1),
Mode = AggressiveCacheMode.TrackChanges
2021-11-19 14:59:24 +01:00
}
2021-11-23 11:35:01 +01:00
}
2021-11-19 14:59:24 +01:00
};
conventionsBuilder.Run(store.Conventions);
IDocumentStore raven = store.Initialize();
// create all indexes
2021-11-22 14:29:22 +01:00
if (options.Initialized)
2021-11-19 14:59:24 +01:00
{
//var indexes = options.Raven.Indexes.BuildAll(options, store);
//IndexCreation.CreateIndexes(indexes, store, database: options.Raven.Database);
}
return (ZeroDocumentStore)raven;
}
}