private static Marten.DocumentStore GetSharedStore( string connString, DocumentMappableSerializationBinder serializationBinder, IDocumentStoreAssemblyDiscoverer discoverer) { sharedLock.EnterUpgradeableReadLock(); try { if (sharedStore != null && sharedConnection == connString) { return(sharedStore); } sharedLock.EnterWriteLock(); try { var store = CreateNewStore(connString, serializationBinder, discoverer); ScopedDocumentStore.ClearMappedTenancies(); sharedStore = store; sharedConnection = connString; return(store); } finally { sharedLock.ExitWriteLock(); } } finally { sharedLock.ExitUpgradeableReadLock(); } }
private static Marten.DocumentStore CreateNewStore(string connString, DocumentMappableSerializationBinder serializationBinder, IDocumentStoreAssemblyDiscoverer discoverer) { var store = Marten.DocumentStore.For(options => { options.Logger(new SerilogMartenLogger()); var serializer = new Marten.Services.JsonNetSerializer { EnumStorage = EnumStorage.AsString }; serializer.Customize(x => x.SerializationBinder = serializationBinder); options.PLV8Enabled = false; // Not installed by default in PostgreSQL 11 options.AutoCreateSchemaObjects = AutoCreate.None; options.Connection(connString); options.Serializer(serializer); foreach (var(docType, attr) in discoverer.DiscoverAutoDocumentCollectionTypes()) { options.Storage.MappingFor(docType); } foreach (var cfgType in discoverer.DiscoverDocumentStoreConfigurers()) { ((IDocumentStoreConfiguration)Activator.CreateInstance(cfgType)).Configure(options); } }); return(store); }
public DocumentStoreFactory( IConfiguration configuration, DocumentMappableSerializationBinder serializationBinder, IDocumentStoreAssemblyDiscoverer discoverer) { this.serializationBinder = serializationBinder ?? throw new ArgumentNullException(nameof(serializationBinder)); this.discoverer = discoverer ?? throw new ArgumentNullException(nameof(discoverer)); connectionString = configuration["ConnectionStrings:MeaDatabase"]; }