From 715c606513f0bdbded0476cb1e3521c568dbfaf2 Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 10 Dec 2024 14:39:00 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/ConcurrentAppConfigurator.cs | 25 +++++-------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/src/dotnetCampus.Configurations/Core/ConcurrentAppConfigurator.cs b/src/dotnetCampus.Configurations/Core/ConcurrentAppConfigurator.cs index 600db94..8bbcbb3 100644 --- a/src/dotnetCampus.Configurations/Core/ConcurrentAppConfigurator.cs +++ b/src/dotnetCampus.Configurations/Core/ConcurrentAppConfigurator.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; namespace dotnetCampus.Configurations.Core @@ -17,12 +18,10 @@ internal ConcurrentAppConfigurator(IConfigurationRepo repo) _repo = repo ?? throw new ArgumentNullException(nameof(repo)); } - private readonly object _locker = new object(); - private readonly IConfigurationRepo _repo; - private readonly Dictionary _configurationDictionary - = new Dictionary(); + private readonly ConcurrentDictionary _configurationDictionary + = new ConcurrentDictionary(); /// /// 获取 类型的配置项组。 @@ -31,25 +30,13 @@ private readonly Dictionary _configurationDictionary /// 配置项组。 public TConfiguration Of() where TConfiguration : Configuration, new() { - if (_configurationDictionary.TryGetValue(typeof(TConfiguration), out var configuration)) - { - return (TConfiguration) configuration; - } - - lock (_locker) + return (TConfiguration) _configurationDictionary.GetOrAdd(typeof(TConfiguration), _ => { - if (_configurationDictionary.TryGetValue(typeof(TConfiguration), out var lockedConfiguration)) - { - return (TConfiguration) lockedConfiguration; - } - - configuration = new TConfiguration + return new TConfiguration { Repo = _repo }; - _configurationDictionary[typeof(TConfiguration)] = configuration; - return (TConfiguration)configuration; - } + }); } /// From df4ba59cbda5ea8634562c8e0cc8f75a97136d47 Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 10 Dec 2024 14:44:59 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=85=81=E8=AE=B8=E4=BB=8E=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=87=8C=E9=9D=A2=E9=87=8D=E6=96=B0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=AE=A1=E7=90=86=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Configuration.cs | 20 +++++++++++++++++++ .../Core/ConcurrentAppConfigurator.cs | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/dotnetCampus.Configurations/Configuration.cs b/src/dotnetCampus.Configurations/Configuration.cs index b15fbdc..55b1f18 100644 --- a/src/dotnetCampus.Configurations/Configuration.cs +++ b/src/dotnetCampus.Configurations/Configuration.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Runtime.CompilerServices; using dotnetCampus.Configurations.Core; @@ -271,5 +272,24 @@ protected void ClearValues() /// 获取用于管理应用程序字符串配置项的管理器。 /// internal IConfigurationRepo? Repo { get; set; } + + internal IAppConfigurator? AppConfigurator { get; set; } + + /// + /// 尝试获取 实例。只有配置框架内部创建的配置,才能获取到 实例。 + /// + /// + /// + public bool TryGetAppConfigurator + ( +#if NETCOREAPP3_0_OR_GREATER + [NotNullWhen(true)] +#endif + out IAppConfigurator? appConfigurator + ) + { + appConfigurator = AppConfigurator; + return appConfigurator != null; + } } } diff --git a/src/dotnetCampus.Configurations/Core/ConcurrentAppConfigurator.cs b/src/dotnetCampus.Configurations/Core/ConcurrentAppConfigurator.cs index 8bbcbb3..38d0df6 100644 --- a/src/dotnetCampus.Configurations/Core/ConcurrentAppConfigurator.cs +++ b/src/dotnetCampus.Configurations/Core/ConcurrentAppConfigurator.cs @@ -34,7 +34,8 @@ private readonly ConcurrentDictionary _configurationDiction { return new TConfiguration { - Repo = _repo + Repo = _repo, + AppConfigurator = this, }; }); } From 9972612070ed8482b23297e46a29558ef1387522 Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 10 Dec 2024 14:51:48 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=93=E5=8C=85?= =?UTF-8?q?=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Directory.Build.props | 11 +++++++++++ ...ions.MicrosoftExtensionsConfiguration.Tests.csproj | 1 + .../dotnetCampus.Configurations.Tests.csproj | 1 + 3 files changed, 13 insertions(+) diff --git a/Directory.Build.props b/Directory.Build.props index c541d02..2c7c23c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,5 +12,16 @@ git latest enable + Copyright (c) dotnet-campus 2020-$([System.DateTime]::Now.ToString(`yyyy`)) + README.md + + true + + true + snupkg + + + + \ No newline at end of file diff --git a/tests/dotnetCampus.Configurations.MicrosoftExtensionsConfiguration.Tests/dotnetCampus.Configurations.MicrosoftExtensionsConfiguration.Tests.csproj b/tests/dotnetCampus.Configurations.MicrosoftExtensionsConfiguration.Tests/dotnetCampus.Configurations.MicrosoftExtensionsConfiguration.Tests.csproj index f065bd2..da63d21 100644 --- a/tests/dotnetCampus.Configurations.MicrosoftExtensionsConfiguration.Tests/dotnetCampus.Configurations.MicrosoftExtensionsConfiguration.Tests.csproj +++ b/tests/dotnetCampus.Configurations.MicrosoftExtensionsConfiguration.Tests/dotnetCampus.Configurations.MicrosoftExtensionsConfiguration.Tests.csproj @@ -5,6 +5,7 @@ false false + true diff --git a/tests/dotnetCampus.Configurations.Tests/dotnetCampus.Configurations.Tests.csproj b/tests/dotnetCampus.Configurations.Tests/dotnetCampus.Configurations.Tests.csproj index 99e64d0..59042d4 100644 --- a/tests/dotnetCampus.Configurations.Tests/dotnetCampus.Configurations.Tests.csproj +++ b/tests/dotnetCampus.Configurations.Tests/dotnetCampus.Configurations.Tests.csproj @@ -5,6 +5,7 @@ latest enable false + true