diff options
author | crupest <crupest@outlook.com> | 2022-12-21 11:51:25 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-12-21 11:51:25 +0800 |
commit | 13a1aef3364c3ecfed41d30ceebdcd255ae8141c (patch) | |
tree | 411350f425f767fe6a8b3d1f753c713ea2b0a0e6 /docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/DbConnectionFactory.cs | |
parent | 4264d8135c066081dbabb412db17bf537ceab86e (diff) | |
download | crupest-13a1aef3364c3ecfed41d30ceebdcd255ae8141c.tar.gz crupest-13a1aef3364c3ecfed41d30ceebdcd255ae8141c.tar.bz2 crupest-13a1aef3364c3ecfed41d30ceebdcd255ae8141c.zip |
Develop secret api. v51
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/DbConnectionFactory.cs')
-rw-r--r-- | docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/DbConnectionFactory.cs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/DbConnectionFactory.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/DbConnectionFactory.cs index e8f8abf..85b818b 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/DbConnectionFactory.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/DbConnectionFactory.cs @@ -7,6 +7,7 @@ namespace CrupestApi.Commons.Crud; public interface IDbConnectionFactory { IDbConnection Get(string? name = null); + bool ShouldDisposeConnection { get; } } public class SqliteConnectionFactory : IDbConnectionFactory @@ -28,4 +29,44 @@ public class SqliteConnectionFactory : IDbConnectionFactory return new SqliteConnection(connectionString); } + + public bool ShouldDisposeConnection => true; +} + +public class SqliteMemoryConnectionFactory : IDbConnectionFactory, IDisposable +{ + private readonly Dictionary<string, IDbConnection> _connections = new(); + + public IDbConnection Get(string? name = null) + { + name = name ?? "crupest-api"; + + if (_connections.TryGetValue(name, out var connection)) + { + return connection; + } + else + { + var connectionString = new SqliteConnectionStringBuilder() + { + DataSource = ":memory:", + Mode = SqliteOpenMode.ReadWriteCreate + }.ToString(); + + connection = new SqliteConnection(connectionString); + _connections.Add(name, connection); + return connection; + } + } + + public bool ShouldDisposeConnection => false; + + + public void Dispose() + { + foreach (var connection in _connections.Values) + { + connection.Dispose(); + } + } } |