Parcourir la source

refactor: Use ITransientCachedServiceProvider instead of IAbpLazyServiceProvider

Bruce Wayne il y a 5 mois
Parent
commit
d705c1613e

+ 8 - 6
src/NatTypeTester.ViewModels/MainWindowViewModel.cs

@@ -1,5 +1,6 @@
 using DynamicData;
 using DynamicData.Binding;
+using Microsoft.Extensions.DependencyInjection;
 using Microsoft.VisualStudio.Threading;
 using NatTypeTester.Models;
 using ReactiveUI;
@@ -16,22 +17,23 @@ namespace NatTypeTester.ViewModels;
 )]
 public class MainWindowViewModel : ViewModelBase, IScreen
 {
-	public RoutingState Router => LazyServiceProvider.LazyGetRequiredService<RoutingState>();
+	public RoutingState Router => TransientCachedServiceProvider.GetRequiredService<RoutingState>();
 
-	public Config Config => LazyServiceProvider.LazyGetRequiredService<Config>();
+	public Config Config => TransientCachedServiceProvider.GetRequiredService<Config>();
 
-	private static readonly FrozenSet<string> DefaultServers = new[]
-	{
+	private static readonly FrozenSet<string> DefaultServers =
+	[
 		@"stun.hot-chilli.net",
 		@"stun.fitauto.ru",
 		@"stun.internetcalls.com",
 		@"stun.miwifi.com",
 		@"stun.voip.aebc.com",
 		@"stun.voipbuster.com",
-		@"stun.voipstunt.com",
-	}.ToFrozenSet();
+		@"stun.voipstunt.com"
+	];
 
 	private SourceList<string> List { get; } = new();
+
 	public readonly IObservableCollection<string> StunServers = new ObservableCollectionExtended<string>();
 
 	public MainWindowViewModel()

+ 15 - 8
src/NatTypeTester.ViewModels/RFC3489ViewModel.cs

@@ -2,6 +2,7 @@ using Dns.Net.Abstractions;
 using Dns.Net.Clients;
 using JetBrains.Annotations;
 using Microsoft;
+using Microsoft.Extensions.DependencyInjection;
 using NatTypeTester.Models;
 using ReactiveUI;
 using Socks5.Models;
@@ -20,15 +21,19 @@ namespace NatTypeTester.ViewModels;
 public class RFC3489ViewModel : ViewModelBase, IRoutableViewModel
 {
 	public string UrlPathSegment => @"RFC3489";
-	public IScreen HostScreen => LazyServiceProvider.LazyGetRequiredService<IScreen>();
 
-	private Config Config => LazyServiceProvider.LazyGetRequiredService<Config>();
+	public IScreen HostScreen => TransientCachedServiceProvider.GetRequiredService<IScreen>();
 
-	private IDnsClient DnsClient => LazyServiceProvider.LazyGetRequiredService<IDnsClient>();
-	private IDnsClient AAAADnsClient => LazyServiceProvider.LazyGetRequiredService<DefaultAAAAClient>();
-	private IDnsClient ADnsClient => LazyServiceProvider.LazyGetRequiredService<DefaultAClient>();
+	private Config Config => TransientCachedServiceProvider.GetRequiredService<Config>();
+
+	private IDnsClient DnsClient => TransientCachedServiceProvider.GetRequiredService<IDnsClient>();
+
+	private IDnsClient AAAADnsClient => TransientCachedServiceProvider.GetRequiredService<DefaultAAAAClient>();
+
+	private IDnsClient ADnsClient => TransientCachedServiceProvider.GetRequiredService<DefaultAClient>();
 
 	private ClassicStunResult _result3489;
+
 	public ClassicStunResult Result3489
 	{
 		get => _result3489;
@@ -64,6 +69,7 @@ public class RFC3489ViewModel : ViewModelBase, IRoutableViewModel
 		};
 
 		IPAddress? serverIp;
+
 		if (Result3489.LocalEndPoint is null)
 		{
 			serverIp = await DnsClient.QueryAsync(server.Hostname, token);
@@ -88,11 +94,12 @@ public class RFC3489ViewModel : ViewModelBase, IRoutableViewModel
 		try
 		{
 			using (Observable.Interval(TimeSpan.FromSeconds(0.1))
-					.ObserveOn(RxApp.MainThreadScheduler)
-					// ReSharper disable once AccessToDisposedClosure
-					.Subscribe(_ => Result3489 = client.State with { }))
+				       .ObserveOn(RxApp.MainThreadScheduler)
+				       // ReSharper disable once AccessToDisposedClosure
+				       .Subscribe(_ => Result3489 = client.State with { }))
 			{
 				await client.ConnectProxyAsync(token);
+
 				try
 				{
 					await client.QueryAsync(token);

+ 20 - 10
src/NatTypeTester.ViewModels/RFC5780ViewModel.cs

@@ -2,6 +2,7 @@ using Dns.Net.Abstractions;
 using Dns.Net.Clients;
 using JetBrains.Annotations;
 using Microsoft;
+using Microsoft.Extensions.DependencyInjection;
 using NatTypeTester.Models;
 using ReactiveUI;
 using Socks5.Models;
@@ -21,15 +22,19 @@ namespace NatTypeTester.ViewModels;
 public class RFC5780ViewModel : ViewModelBase, IRoutableViewModel
 {
 	public string UrlPathSegment => @"RFC5780";
-	public IScreen HostScreen => LazyServiceProvider.LazyGetRequiredService<IScreen>();
 
-	private Config Config => LazyServiceProvider.LazyGetRequiredService<Config>();
+	public IScreen HostScreen => TransientCachedServiceProvider.GetRequiredService<IScreen>();
 
-	private IDnsClient DnsClient => LazyServiceProvider.LazyGetRequiredService<IDnsClient>();
-	private IDnsClient AAAADnsClient => LazyServiceProvider.LazyGetRequiredService<DefaultAAAAClient>();
-	private IDnsClient ADnsClient => LazyServiceProvider.LazyGetRequiredService<DefaultAClient>();
+	private Config Config => TransientCachedServiceProvider.GetRequiredService<Config>();
+
+	private IDnsClient DnsClient => TransientCachedServiceProvider.GetRequiredService<IDnsClient>();
+
+	private IDnsClient AAAADnsClient => TransientCachedServiceProvider.GetRequiredService<DefaultAAAAClient>();
+
+	private IDnsClient ADnsClient => TransientCachedServiceProvider.GetRequiredService<DefaultAClient>();
 
 	private StunResult5389 _result5389;
+
 	public StunResult5389 Result5389
 	{
 		get => _result5389;
@@ -41,6 +46,7 @@ public class RFC5780ViewModel : ViewModelBase, IRoutableViewModel
 	private StunResult5389 _tlsResult;
 
 	private TransportType _transportType;
+
 	public TransportType TransportType
 	{
 		get => _transportType;
@@ -79,6 +85,7 @@ public class RFC5780ViewModel : ViewModelBase, IRoutableViewModel
 		};
 
 		IPAddress? serverIp;
+
 		if (Result5389.LocalEndPoint is null)
 		{
 			serverIp = await DnsClient.QueryAsync(server.Hostname, token);
@@ -97,6 +104,7 @@ public class RFC5780ViewModel : ViewModelBase, IRoutableViewModel
 		}
 
 		TransportType transport = TransportType;
+
 		if (transport is TransportType.Udp)
 		{
 			using IUdpProxy proxy = ProxyFactory.CreateProxy(Config.ProxyType, Result5389.LocalEndPoint, socks5Option);
@@ -105,11 +113,12 @@ public class RFC5780ViewModel : ViewModelBase, IRoutableViewModel
 			try
 			{
 				using (Observable.Interval(TimeSpan.FromSeconds(0.1))
-						.ObserveOn(RxApp.MainThreadScheduler)
-						// ReSharper disable once AccessToDisposedClosure
-						.Subscribe(_ => Result5389 = _udpResult = client.State with { }))
+					       .ObserveOn(RxApp.MainThreadScheduler)
+					       // ReSharper disable once AccessToDisposedClosure
+					       .Subscribe(_ => Result5389 = _udpResult = client.State with { }))
 				{
 					await client.ConnectProxyAsync(token);
+
 					try
 					{
 						await client.QueryAsync(token);
@@ -133,8 +142,8 @@ public class RFC5780ViewModel : ViewModelBase, IRoutableViewModel
 			try
 			{
 				using (Observable.Interval(TimeSpan.FromSeconds(0.1))
-						.ObserveOn(RxApp.MainThreadScheduler)
-						.Subscribe(_ => UpdateData()))
+					       .ObserveOn(RxApp.MainThreadScheduler)
+					       .Subscribe(_ => UpdateData()))
 				{
 					await client.QueryAsync(token);
 				}
@@ -148,6 +157,7 @@ public class RFC5780ViewModel : ViewModelBase, IRoutableViewModel
 			{
 				// ReSharper disable once AccessToDisposedClosure
 				Result5389 = client.State with { };
+
 				if (transport is TransportType.Tcp)
 				{
 					_tcpResult = Result5389;

+ 4 - 2
src/NatTypeTester.ViewModels/SettingViewModel.cs

@@ -1,4 +1,5 @@
 using JetBrains.Annotations;
+using Microsoft.Extensions.DependencyInjection;
 using NatTypeTester.Models;
 using ReactiveUI;
 
@@ -8,7 +9,8 @@ namespace NatTypeTester.ViewModels;
 public class SettingViewModel : ViewModelBase, IRoutableViewModel
 {
 	public string UrlPathSegment => @"Settings";
-	public IScreen HostScreen => LazyServiceProvider.LazyGetRequiredService<IScreen>();
 
-	public Config Config => LazyServiceProvider.LazyGetRequiredService<Config>();
+	public IScreen HostScreen => TransientCachedServiceProvider.GetRequiredService<IScreen>();
+
+	public Config Config => TransientCachedServiceProvider.GetRequiredService<Config>();
 }

+ 4 - 1
src/NatTypeTester.ViewModels/ViewModelBase.cs

@@ -1,3 +1,4 @@
+using Microsoft.Extensions.DependencyInjection;
 using ReactiveUI;
 using Volo.Abp.DependencyInjection;
 
@@ -5,5 +6,7 @@ namespace NatTypeTester.ViewModels;
 
 public abstract class ViewModelBase : ReactiveObject, ISingletonDependency
 {
-	public IAbpLazyServiceProvider LazyServiceProvider { get; init; } = null!;
+	public required ITransientCachedServiceProvider TransientCachedServiceProvider { get; init; }
+
+	protected IServiceProvider ServiceProvider => TransientCachedServiceProvider.GetRequiredService<IServiceProvider>();
 }