From 512f25c43defbd294589f3ab2c49e498c3c1ebbc Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 10:40:06 +0800 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=8F=90=E9=AB=98=E5=8F=AF=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IPLocator/DefaultIpLocatorFactory.cs | 40 ++++++++----------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/src/BootstrapBlazor/Services/IPLocator/DefaultIpLocatorFactory.cs b/src/BootstrapBlazor/Services/IPLocator/DefaultIpLocatorFactory.cs index 675b07ccf03..b4727092f14 100644 --- a/src/BootstrapBlazor/Services/IPLocator/DefaultIpLocatorFactory.cs +++ b/src/BootstrapBlazor/Services/IPLocator/DefaultIpLocatorFactory.cs @@ -10,27 +10,9 @@ namespace BootstrapBlazor.Components; /// /// IIPLocatorFactory 接口实现类 /// -class DefaultIpLocatorFactory : IIpLocatorFactory +class DefaultIpLocatorFactory(IServiceProvider provider, IOptionsMonitor options) : IIpLocatorFactory { - private readonly Dictionary _providers = []; - - private readonly IServiceProvider _serviceProvider; - - private readonly IOptionsMonitor _options; - - public DefaultIpLocatorFactory(IServiceProvider provider, IOptionsMonitor options) - { - _serviceProvider = provider; - _options = options; - - foreach (var p in provider.GetServices()) - { - if (p.Key != null) - { - _providers[p.Key] = p; - } - } - } + private Dictionary? _providers = null; /// /// 创建 实例方法 @@ -38,11 +20,21 @@ public DefaultIpLocatorFactory(IServiceProvider provider, IOptionsMonitor public IIpLocatorProvider Create(string? key = null) { - var providerKey = key; - if (string.IsNullOrEmpty(key)) + _providers ??= GenerateProviders(); + var providerKey = key ?? options.CurrentValue.IpLocatorOptions.ProviderName; + return string.IsNullOrEmpty(providerKey) ? _providers.Values.Last() : _providers[providerKey]; + } + + private Dictionary GenerateProviders() + { + var providers = new Dictionary(); + foreach (var p in provider.GetServices()) { - providerKey = _options.CurrentValue.IpLocatorOptions.ProviderName; + if (p.Key != null) + { + providers[p.Key] = p; + } } - return string.IsNullOrEmpty(providerKey) ? _providers.Values.Last() : _providers[providerKey]; + return providers; } } From fca606b3523e02d12708eee61bed976c1135bc5e Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 10:46:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E5=AE=9A=E4=BD=8D?= =?UTF-8?q?=E5=99=A8=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Samples/Locators.razor | 28 +++++-------------- src/BootstrapBlazor.Server/Locales/en-US.json | 1 + src/BootstrapBlazor.Server/Locales/zh-CN.json | 1 + 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Locators.razor b/src/BootstrapBlazor.Server/Components/Samples/Locators.razor index 8fb07a28cff..4e0dc7cd842 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Locators.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Locators.razor @@ -17,6 +17,7 @@ private IIpLocatorFactory? IpLocatorFactory { get; set; }
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)

@Localizer["LocatorsNormalExtendDescription"]

+

@Localizer["LocatorsNormalExtend1"]

private class CustomerLocatorProvider : DefaultIpLocatorProvider
 {
@@ -25,35 +26,20 @@ private IIpLocatorFactory? IpLocatorFactory { get; set; }
         throw new NotImplementedException();
     }
 }
+

@Localizer["LocatorsNormalExtend2"]

services.AddSingleton<IIpLocatorProvider, CustomerLocatorProvider>();

@((MarkupString)Localizer["LocatorsNormalCustomerLocator"].Value)

+ +

@Localizer["LocatorsNormalExtend3"]

+
var provider = IpLocatorFactory.Create(ProviderName);
+Location = await provider.Locate(Ip);
+

@Localizer["LocatorsNormalIpTitle"]

112.224.74.239 @Localizer["LocatorsNormalTips3"]

183.160.236.53 @Localizer["LocatorsNormalTips4"]

-
- @((MarkupString)Localizer["LocatorsProviderDesc"].Value) - -

@((MarkupString)Localizer["LocatorsProviderOptions"].Value)

-
-
{
-    "BootstrapBlazorOptions": {
-        "WebClientOptions": {
-            "EnableIpLocator": true
-        }
-    }
-}
-
services.AddBootstrapBlazor(op =>
-{
-    op.WebClientOptions.EnableIpLocator = true;
-});
-
services.Configure<BootstrapBlazorOptions>(op =>
-{
-    op.WebClientOptions.EnableIpLocator = true;
-});
-