Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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"];
        }
 public static IServiceCollection AddDocumentStore(this IServiceCollection services, IDocumentStoreAssemblyDiscoverer discoverer)
 {
     services.TryAddScoped <IScopedDocumentStore>(x => x.GetRequiredService <DocumentStoreFactory>().GetStore());
     services.TryAddSingleton <DocumentStoreFactory>();
     services.TryAddSingleton <DocumentMappableSerializationBinder>();
     services.TryAddSingleton <IDocumentStoreAssemblyDiscoverer>(discoverer);
     return(services);
 }