aboutsummaryrefslogtreecommitdiff
path: root/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/DbConnectionFactory.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-12-21 11:51:25 +0800
committercrupest <crupest@outlook.com>2022-12-21 11:51:25 +0800
commit13a1aef3364c3ecfed41d30ceebdcd255ae8141c (patch)
tree411350f425f767fe6a8b3d1f753c713ea2b0a0e6 /docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/DbConnectionFactory.cs
parent4264d8135c066081dbabb412db17bf537ceab86e (diff)
downloadcrupest-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.cs41
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();
+ }
+ }
}