Skip to content

Commit 68912f8

Browse files
committed
+net9.0
1 parent d35a3d6 commit 68912f8

File tree

20 files changed

+212
-126
lines changed

20 files changed

+212
-126
lines changed

DistributedFileStorage.EntityFrameworkCore/DfsDatabase.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,23 @@
99

1010
namespace DistributedFileStorage.EntityFrameworkCore
1111
{
12-
public class DfsDatabase<TMetadata> : IDfsDatabase<TMetadata>
12+
public class DfsDatabase<TMetadata> : IDfsDatabase<TMetadata>, IDisposable
1313
{
1414
public DfsDatabase(DfsDbSettings? settings = null)
1515
{
1616
_settings = settings ?? new();
17-
_context = new(_settings.ContextConfigurator);
17+
_context = new(_settings);
1818
}
1919

2020
readonly DfsDbContext _context;
2121
readonly DfsDbSettings _settings;
2222

23+
public void Dispose()
24+
{
25+
_context.Dispose();
26+
GC.SuppressFinalize(this);
27+
}
28+
2329
public Task Add(DfsDbItem<TMetadata> item, CancellationToken cancellationToken = default)
2430
{
2531
var fileInfo = new DfsDbFileInfo

DistributedFileStorage.EntityFrameworkCore/DfsDbContext.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,28 @@ namespace DistributedFileStorage.EntityFrameworkCore
66

77
internal class DfsDbContext : DbContext
88
{
9-
public DfsDbContext(DfsDbContextConfigurator configurator)
9+
public DfsDbContext(DfsDbSettings settings)
1010
{
11-
_configurator = configurator;
11+
_settings = settings;
1212

1313
DfsFileInfo = Set<DfsDbFileInfo>();
1414
DfsContentInfo = Set<DfsDbContentInfo>();
1515
}
1616

17-
private readonly DfsDbContextConfigurator _configurator;
17+
private readonly DfsDbSettings _settings;
1818

1919
public DbSet<DfsDbFileInfo> DfsFileInfo { get; private set; }
2020
public DbSet<DfsDbContentInfo> DfsContentInfo { get; private set; }
2121

22-
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => _configurator(optionsBuilder);
22+
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => _settings.ContextConfigurator(optionsBuilder);
23+
24+
protected override void OnModelCreating(ModelBuilder modelBuilder)
25+
{
26+
modelBuilder.Entity<DfsDbFileInfo>().ToTable(_settings.FileInfoTable);
27+
modelBuilder.Entity<DfsDbContentInfo>().ToTable(_settings.ContentInfoTable);
28+
29+
base.OnModelCreating(modelBuilder);
30+
}
2331
}
2432

2533
}

DistributedFileStorage.EntityFrameworkCore/DfsDbSettings.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ namespace DistributedFileStorage.EntityFrameworkCore
55
{
66
public class DfsDbSettings
77
{
8+
public string FileInfoTable { get; set; } = "DfsFileInfo";
9+
10+
public string ContentInfoTable { get; set; } = "DfsContentInfo";
11+
812
public int? MaxMetadataLength { get; set; }
913

1014
public JsonSerializerSettings JsonSerializer { get; set; } = new()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
3+
namespace DistributedFileStorage.EntityFrameworkCore
4+
{
5+
internal class DfsEfc<TMetadata>(DfsDatabase<TMetadata> database, DfsSettings? settings)
6+
: DistributedFileStorage<TMetadata>(database, settings),
7+
IDisposable
8+
{
9+
public void Dispose()
10+
{
11+
database.Dispose();
12+
GC.SuppressFinalize(this);
13+
}
14+
}
15+
}

DistributedFileStorage.EntityFrameworkCore/DistributedFileStorage.EntityFrameworkCore.csproj

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0</TargetFrameworks>
4+
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
55
<LangVersion>latest</LangVersion>
66
<Nullable>enable</Nullable>
77
<SignAssembly>True</SignAssembly>
88
<AssemblyOriginatorKeyFile>..\DistributedFileStorage.snk</AssemblyOriginatorKeyFile>
9-
<AssemblyVersion>1.1.0</AssemblyVersion>
10-
<FileVersion>1.1.0</FileVersion>
11-
<Version>1.1.0</Version>
9+
<AssemblyVersion>1.1.1</AssemblyVersion>
10+
<FileVersion>1.1.1</FileVersion>
11+
<Version>1.1.1</Version>
1212
<Company></Company>
1313
<Authors>Leonid Salavatov</Authors>
1414
<Copyright>Leonid Salavatov 2024</Copyright>
@@ -33,17 +33,17 @@
3333

3434
<ItemGroup>
3535
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
36+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" Condition="'$(TargetFramework)' != 'net9.0'" />
37+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.0" Condition="'$(TargetFramework)' == 'net9.0'" />
3638
</ItemGroup>
3739

38-
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
39-
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.1" />
40+
<ItemGroup>
41+
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.0" Condition="'$(TargetFramework)' == 'net9.0'" />
42+
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.11" Condition="'$(TargetFramework)' == 'net8.0'" />
43+
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.20" Condition="'$(TargetFramework)' == 'net7.0'" />
44+
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.36" Condition="'$(TargetFramework)' == 'net6.0'" />
45+
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.17" Condition="'$(TargetFramework)' == 'netstandard2.1'" />
46+
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.32" Condition="'$(TargetFramework)' == 'netstandard2.0'" />
4047
</ItemGroup>
4148

42-
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net6.0'">
43-
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.14" />
44-
</ItemGroup>
45-
46-
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
47-
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.17" />
48-
</ItemGroup>
4949
</Project>

DistributedFileStorage.EntityFrameworkCore/Extensions.cs

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using DistributedFileStorage;
2+
using DistributedFileStorage.EntityFrameworkCore;
3+
using System;
4+
5+
namespace Microsoft.Extensions.DependencyInjection;
6+
7+
public static class DfsEfcExtensions
8+
{
9+
public static IServiceCollection AddDfsEfc(this IServiceCollection services,
10+
Action<IServiceProvider, DfsEfcOptions> optionsBuilder,
11+
ServiceLifetime lifetime = ServiceLifetime.Transient)
12+
{
13+
return services.AddDfsEfc<string>(optionsBuilder, lifetime);
14+
}
15+
16+
public static IServiceCollection AddDfsEfc<TMetadata>(this IServiceCollection services,
17+
Action<IServiceProvider, DfsEfcOptions> optionsBuilder,
18+
ServiceLifetime lifetime = ServiceLifetime.Transient)
19+
{
20+
services.Add(new ServiceDescriptor(typeof(IDistributedFileStorage<TMetadata>), (x) => CreateDfs<TMetadata>(x, optionsBuilder), lifetime));
21+
return services;
22+
}
23+
24+
public static IServiceCollection AddKeyedDfsEfc(this IServiceCollection services,
25+
object? serviceKey,
26+
Action<IServiceProvider, DfsEfcOptions> optionsBuilder,
27+
ServiceLifetime lifetime = ServiceLifetime.Transient)
28+
{
29+
return services.AddKeyedDfsEfc<string>(serviceKey, optionsBuilder, lifetime);
30+
}
31+
32+
public static IServiceCollection AddKeyedDfsEfc<TMetadata>(this IServiceCollection services,
33+
object? serviceKey,
34+
Action<IServiceProvider, DfsEfcOptions> optionsBuilder,
35+
ServiceLifetime lifetime = ServiceLifetime.Transient)
36+
{
37+
services.Add(new ServiceDescriptor(typeof(IDistributedFileStorage<TMetadata>), serviceKey, (x, k) => CreateDfs<TMetadata>(x, optionsBuilder), lifetime));
38+
return services;
39+
}
40+
41+
static DfsEfc<TMetadata> CreateDfs<TMetadata>(IServiceProvider x, Action<IServiceProvider, DfsEfcOptions>? optionsBuilder)
42+
{
43+
var options = new DfsEfcOptions();
44+
optionsBuilder?.Invoke(x, options);
45+
46+
return new(new DfsDatabase<TMetadata>(options.Database), options.FileStorage);
47+
}
48+
}

DistributedFileStorage.MongoDB/DfsDatabase.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace DistributedFileStorage.MongoDB
1111
{
12-
public class DfsDatabase<TMetadata> : IDfsDatabase<TMetadata>
12+
public class DfsDatabase<TMetadata> : IDfsDatabase<TMetadata>, IDisposable
1313
{
1414
public DfsDatabase(DfsDbSettings? settings = null)
1515
{
@@ -26,6 +26,14 @@ public DfsDatabase(DfsDbSettings? settings = null)
2626
readonly DfsDbSettings _settings;
2727
readonly Lazy<IMongoCollection<DfsDbFileInfo<TMetadata>>> _fileInfos;
2828

29+
public void Dispose()
30+
{
31+
if (_fileInfos.IsValueCreated)
32+
_fileInfos.Value.Database.Client.Dispose();
33+
34+
GC.SuppressFinalize(this);
35+
}
36+
2937
public Task Add(DfsDbItem<TMetadata> item, CancellationToken cancellationToken = default)
3038
{
3139
return _fileInfos.Value.InsertOneAsync(new()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
3+
namespace DistributedFileStorage.MongoDB
4+
{
5+
internal class DfsMongo<TMetadata>(DfsDatabase<TMetadata> database, DfsSettings? settings)
6+
: DistributedFileStorage<TMetadata>(database, settings),
7+
IDisposable
8+
{
9+
public void Dispose()
10+
{
11+
database.Dispose();
12+
GC.SuppressFinalize(this);
13+
}
14+
}
15+
}

DistributedFileStorage.MongoDB/DistributedFileStorage.MongoDB.csproj

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0</TargetFrameworks>
4+
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
55
<LangVersion>latest</LangVersion>
66
<Nullable>enable</Nullable>
77
<SignAssembly>True</SignAssembly>
88
<AssemblyOriginatorKeyFile>..\DistributedFileStorage.snk</AssemblyOriginatorKeyFile>
9-
<AssemblyVersion>1.1.0</AssemblyVersion>
10-
<FileVersion>1.1.0</FileVersion>
11-
<Version>1.1.0</Version>
9+
<AssemblyVersion>1.1.1</AssemblyVersion>
10+
<FileVersion>1.1.1</FileVersion>
11+
<Version>1.1.1</Version>
1212
<Company></Company>
1313
<Authors>Leonid Salavatov</Authors>
1414
<Copyright>Leonid Salavatov 2024</Copyright>
@@ -32,8 +32,9 @@
3232
</ItemGroup>
3333

3434
<ItemGroup>
35-
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
36-
<PackageReference Include="MongoDB.Driver" Version="2.23.1" />
35+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" Condition="'$(TargetFramework)' != 'net9.0'" />
36+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.0" Condition="'$(TargetFramework)' == 'net9.0'" />
37+
<PackageReference Include="MongoDB.Driver" Version="3.0.0" />
3738
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
3839
</ItemGroup>
3940

0 commit comments

Comments
 (0)