Skip to content

Commit 6da1859

Browse files
committed
调整从IServiceCollection中获取IConfiguration的逻辑;
1 parent c2ebee7 commit 6da1859

5 files changed

Lines changed: 41 additions & 7 deletions

File tree

src/Cuture.Extensions.Modularity.Hosting/Extensions/IHostBuilder/InternalHostBuilderExtensions.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
using Cuture.Extensions.Modularity.Internal;
44

5-
using Microsoft.Extensions.Configuration;
65
using Microsoft.Extensions.DependencyInjection;
76
using Microsoft.Extensions.Hosting;
87

@@ -53,7 +52,7 @@ internal static IHostBuilder InternalAddModuleSource(this IHostBuilder hostBuild
5352
hostBuilder.ConfigureServices((context, services) =>
5453
{
5554
services.AddObjectAccessor<IHostBuilderContainer>(new(hostBuilder));
56-
services.AddObjectAccessor<IConfiguration>(context.Configuration);
55+
services.AddObjectAccessor<IConfigurationContainer>(new(context.Configuration));
5756

5857
try
5958
{
@@ -71,8 +70,7 @@ internal static IHostBuilder InternalAddModuleSource(this IHostBuilder hostBuild
7170
}
7271
finally
7372
{
74-
//TODO 不直接移除IConfiguration
75-
services.RemoveObjectAccessor<IConfiguration>();
73+
services.RemoveObjectAccessor<IConfigurationContainer>();
7674
services.RemoveObjectAccessor<IHostBuilderContainer>();
7775
}
7876
});

src/Cuture.Extensions.Modularity.Hosting/Extensions/IServiceCollection/ConfigurationServiceCollectionExtensions.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
using Microsoft.Extensions.Configuration;
1+
using System;
2+
3+
using Cuture.Extensions.Modularity.Internal;
4+
5+
using Microsoft.Extensions.Configuration;
26
using Microsoft.Extensions.Hosting;
37

48
namespace Microsoft.Extensions.DependencyInjection
@@ -17,13 +21,22 @@ public static class ConfigurationServiceCollectionExtensions
1721
/// <returns></returns>
1822
public static IConfiguration? GetConfiguration(this IServiceCollection services)
1923
{
24+
if (services.TryGetObjectAccessorValue<IConfigurationContainer>(out var iConfigurationContainer)
25+
&& iConfigurationContainer is not null)
26+
{
27+
return iConfigurationContainer.Value;
28+
}
2029
var hostBuilderContext = services.GetSingletonServiceInstance<HostBuilderContext>();
2130

2231
return hostBuilderContext?.Configuration as IConfigurationRoot
2332
?? services.GetSingletonServiceInstance<IConfiguration>()
2433
?? (services.TryGetObjectAccessorValue<IConfiguration>(out var configuration) ? configuration : null);
2534
}
2635

36+
/// <inheritdoc cref="GetConfiguration(IServiceCollection)"/>
37+
public static IConfiguration GetRequiredConfiguration(this IServiceCollection services) => services.GetConfiguration()
38+
?? throw new InvalidOperationException($"Not found {nameof(IConfiguration)} in serviceCollection.");
39+
2740
#endregion Public 方法
2841
}
2942
}

src/Cuture.Extensions.Modularity.Hosting/Extensions/IServiceCollection/HostBuilderServiceCollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public static class HostBuilderServiceCollectionExtensions
2121
public static IHostBuilder? GetHostBuilder(this IServiceCollection services) => services.GetObjectAccessorValue<IHostBuilderContainer>()?.Value;
2222

2323
/// <inheritdoc cref="GetHostBuilder(IServiceCollection)"/>
24-
public static IHostBuilder GetRequiredHostBuilder(this IServiceCollection services) => services.GetObjectAccessorValue<IHostBuilderContainer>()?.Value
24+
public static IHostBuilder GetRequiredHostBuilder(this IServiceCollection services) => services.GetHostBuilder()
2525
?? throw new InvalidOperationException($"Not found {nameof(IHostBuilder)} in serviceCollection.");
2626

2727
#endregion Public 方法
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
3+
using Microsoft.Extensions.Configuration;
4+
5+
namespace Cuture.Extensions.Modularity.Internal;
6+
7+
internal class IConfigurationContainer
8+
{
9+
#region Public 属性
10+
11+
public IConfiguration Value { get; set; }
12+
13+
#endregion Public 属性
14+
15+
#region Public 构造函数
16+
17+
public IConfigurationContainer(IConfiguration value)
18+
{
19+
Value = value ?? throw new ArgumentNullException(nameof(value));
20+
}
21+
22+
#endregion Public 构造函数
23+
}

src/Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
<!--Package Info-->
3131
<PropertyGroup>
32-
<VersionPrefix>1.1.8</VersionPrefix>
32+
<VersionPrefix>1.1.9</VersionPrefix>
3333

3434
<PackageIdPrefix>Cuture.Extensions</PackageIdPrefix>
3535
<Authors>Stratos</Authors>

0 commit comments

Comments
 (0)