diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs index 12810aebb9..f03c101c88 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs @@ -22,13 +22,17 @@ namespace Volo.Abp.Cli.Commands public ICancellationTokenProvider CancellationTokenProvider { get; } public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } + private readonly CliHttpClientFactory _cliHttpClientFactory; + public LoginCommand(AuthService authService, ICancellationTokenProvider cancellationTokenProvider, - IRemoteServiceExceptionHandler remoteServiceExceptionHandler) + IRemoteServiceExceptionHandler remoteServiceExceptionHandler, + CliHttpClientFactory cliHttpClientFactory) { AuthService = authService; CancellationTokenProvider = cancellationTokenProvider; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -79,20 +83,19 @@ namespace Volo.Abp.Cli.Commands { var url = $"{CliUrls.WwwAbpIo}api/license/check-multiple-organizations?username={username}"; - using (var client = new CliHttpClient()) + var client = _cliHttpClientFactory.CreateClient(); + + using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger)) { - using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger)) + if (!response.IsSuccessStatusCode) { - if (!response.IsSuccessStatusCode) - { - throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); - } + throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); + } - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); - var responseContent = await response.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize(responseContent); - } + var responseContent = await response.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize(responseContent); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs index d853067abf..1122648ff2 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Cli.Http { Timeout = timeout ?? DefaultTimeout; - AddAuthentication(this); + AddAuthentication(); } public CliHttpClient(bool setBearerToken) : base(new CliHttpClientHandler()) @@ -31,11 +31,11 @@ namespace Volo.Abp.Cli.Http if (setBearerToken) { - AddAuthentication(this); + AddAuthentication(); } } - private static void AddAuthentication(HttpClient client) + public void AddAuthentication() { if (!AuthService.IsLoggedIn()) { @@ -45,7 +45,7 @@ namespace Volo.Abp.Cli.Http var accessToken = File.ReadAllText(CliPaths.AccessToken, Encoding.UTF8); if (!accessToken.IsNullOrEmpty()) { - client.SetBearerToken(accessToken); + this.SetBearerToken(accessToken); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs new file mode 100644 index 0000000000..3748e8e64a --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs @@ -0,0 +1,47 @@ +using System; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Cli.Http +{ + public class CliHttpClientFactory : ISingletonDependency, IDisposable + { + private static CliHttpClient _authenticatedHttpClient; + private static CliHttpClient _unauthenticatedHttpClient; + + public CliHttpClient CreateClient(bool needsAuthentication = true) + { + if (needsAuthentication) + { + return CreateAuthenticatedHttpClient(); + } + + return CreateUnAuthenticatedHttpClient(); + } + + private static CliHttpClient CreateAuthenticatedHttpClient() + { + if (_authenticatedHttpClient == null) + { + _authenticatedHttpClient = new CliHttpClient(setBearerToken: true); + } + + return _authenticatedHttpClient; + } + + private static CliHttpClient CreateUnAuthenticatedHttpClient() + { + if (_unauthenticatedHttpClient == null) + { + _unauthenticatedHttpClient = new CliHttpClient(setBearerToken: false); + } + + return _unauthenticatedHttpClient; + } + + public void Dispose() + { + _authenticatedHttpClient?.Dispose(); + _unauthenticatedHttpClient?.Dispose(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs index 2aeb8ed90a..5ff4d39d4f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs @@ -25,16 +25,19 @@ namespace Volo.Abp.Cli.Licensing private readonly ILogger _logger; private DeveloperApiKeyResult _apiKeyResult = null; + private readonly CliHttpClientFactory _cliHttpClientFactory; public AbpIoApiKeyService( IJsonSerializer jsonSerializer, ICancellationTokenProvider cancellationTokenProvider, IRemoteServiceExceptionHandler remoteServiceExceptionHandler, - ILogger logger) + ILogger logger, + CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; _logger = logger; + _cliHttpClientFactory = cliHttpClientFactory; CancellationTokenProvider = cancellationTokenProvider; } @@ -56,22 +59,21 @@ namespace Volo.Abp.Cli.Licensing } var url = $"{CliUrls.WwwAbpIo}api/license/api-key"; + var client = _cliHttpClientFactory.CreateClient(); - using (var client = new CliHttpClient()) + using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, _logger)) { - using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, _logger)) + if (!response.IsSuccessStatusCode) { - if (!response.IsSuccessStatusCode) - { - throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); - } + throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); + } - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); - var responseContent = await response.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize(responseContent); - } + var responseContent = await response.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize(responseContent); } + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs index 057ffcc02d..7907baaa2d 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs @@ -23,6 +23,7 @@ namespace Volo.Abp.Cli.NuGet protected ICancellationTokenProvider CancellationTokenProvider { get; } protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } private readonly IApiKeyService _apiKeyService; + private readonly CliHttpClientFactory _cliHttpClientFactory; private List _proPackageList; private DeveloperApiKeyResult _apiKeyResult; @@ -30,12 +31,14 @@ namespace Volo.Abp.Cli.NuGet IJsonSerializer jsonSerializer, IRemoteServiceExceptionHandler remoteServiceExceptionHandler, ICancellationTokenProvider cancellationTokenProvider, - IApiKeyService apiKeyService) + IApiKeyService apiKeyService, + CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; CancellationTokenProvider = cancellationTokenProvider; _apiKeyService = apiKeyService; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -93,18 +96,17 @@ namespace Volo.Abp.Cli.NuGet url = $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json"; } - using (var client = new CliHttpClient(setBearerToken: false)) + var client = _cliHttpClientFactory.CreateClient(needsAuthentication: false); + + using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync( + url, + cancellationToken: CancellationTokenProvider.Token, + logger: Logger + )) { - using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync( - url, - cancellationToken: CancellationTokenProvider.Token, - logger: Logger - )) - { - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); - var responseContent = await responseMessage.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize(responseContent).Versions; - } + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); + var responseContent = await responseMessage.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize(responseContent).Versions; } } @@ -120,9 +122,8 @@ namespace Volo.Abp.Cli.NuGet private async Task> GetProPackageListAsync() { - using var client = new CliHttpClient(); - var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/proPackageNames"; + var client = _cliHttpClientFactory.CreateClient(needsAuthentication: true); using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync( url: url, diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs index 621631af2a..e97d7443d4 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs @@ -18,15 +18,18 @@ namespace Volo.Abp.Cli.ProjectBuilding.Analyticses private readonly IJsonSerializer _jsonSerializer; private readonly ILogger _logger; private readonly IRemoteServiceExceptionHandler _remoteServiceExceptionHandler; + private readonly CliHttpClientFactory _cliHttpClientFactory; public CliAnalyticsCollect( ICancellationTokenProvider cancellationTokenProvider, IJsonSerializer jsonSerializer, - IRemoteServiceExceptionHandler remoteServiceExceptionHandler) + IRemoteServiceExceptionHandler remoteServiceExceptionHandler, + CliHttpClientFactory cliHttpClientFactory) { _cancellationTokenProvider = cancellationTokenProvider; _jsonSerializer = jsonSerializer; _remoteServiceExceptionHandler = remoteServiceExceptionHandler; + _cliHttpClientFactory = cliHttpClientFactory; _logger = NullLogger.Instance; } @@ -34,32 +37,31 @@ namespace Volo.Abp.Cli.ProjectBuilding.Analyticses { var postData = _jsonSerializer.Serialize(input); var url = $"{CliUrls.WwwAbpIo}api/clianalytics/collect"; - + try { - using (var client = new CliHttpClient()) - { - var responseMessage = await client.PostAsync( - url, - new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json), - _cancellationTokenProvider.Token - ); + var client = _cliHttpClientFactory.CreateClient(); - if (!responseMessage.IsSuccessStatusCode) - { - var exceptionMessage = "Remote server returns '" + (int)responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. "; - var remoteServiceErrorMessage = await _remoteServiceExceptionHandler.GetAbpRemoteServiceErrorAsync(responseMessage); + var responseMessage = await client.PostAsync( + url, + new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json), + _cancellationTokenProvider.Token + ); - if (remoteServiceErrorMessage != null) - { - exceptionMessage += remoteServiceErrorMessage; - } + if (!responseMessage.IsSuccessStatusCode) + { + var exceptionMessage = "Remote server returns '" + (int)responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. "; + var remoteServiceErrorMessage = await _remoteServiceExceptionHandler.GetAbpRemoteServiceErrorAsync(responseMessage); - _logger.LogInformation(exceptionMessage); + if (remoteServiceErrorMessage != null) + { + exceptionMessage += remoteServiceErrorMessage; } + + _logger.LogInformation(exceptionMessage); } } - catch (Exception ex) + catch (Exception) { // ignored } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs index 81bc704151..92bbe728c0 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs @@ -16,14 +16,18 @@ namespace Volo.Abp.Cli.ProjectBuilding public ICancellationTokenProvider CancellationTokenProvider { get; } public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } + private readonly CliHttpClientFactory _cliHttpClientFactory; + public ModuleInfoProvider( IJsonSerializer jsonSerializer, ICancellationTokenProvider cancellationTokenProvider, - IRemoteServiceExceptionHandler remoteServiceExceptionHandler) + IRemoteServiceExceptionHandler remoteServiceExceptionHandler, + CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; CancellationTokenProvider = cancellationTokenProvider; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; + _cliHttpClientFactory = cliHttpClientFactory; } public async Task GetAsync(string name) @@ -47,17 +51,16 @@ namespace Volo.Abp.Cli.ProjectBuilding private async Task> GetModuleListInternalAsync() { - using (var client = new CliHttpClient()) + var client = _cliHttpClientFactory.CreateClient(); + + using (var responseMessage = await client.GetAsync( + $"{CliUrls.WwwAbpIo}api/download/modules/", + CancellationTokenProvider.Token + )) { - using (var responseMessage = await client.GetAsync( - $"{CliUrls.WwwAbpIo}api/download/modules/", - CancellationTokenProvider.Token - )) - { - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); - var result = await responseMessage.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize>(result); - } + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); + var result = await responseMessage.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize>(result); } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs index b9308dd707..1a4bf3c05a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs @@ -24,13 +24,17 @@ namespace Volo.Abp.Cli.ProjectBuilding public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } public AuthService AuthService { get; } + private readonly CliHttpClientFactory _cliHttpClientFactory; + public TemplateInfoProvider(ICancellationTokenProvider cancellationTokenProvider, IRemoteServiceExceptionHandler remoteServiceExceptionHandler, - AuthService authService) + AuthService authService, + CliHttpClientFactory cliHttpClientFactory) { CancellationTokenProvider = cancellationTokenProvider; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; AuthService = authService; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -76,21 +80,19 @@ namespace Volo.Abp.Cli.ProjectBuilding try { var url = $"{CliUrls.WwwAbpIo}api/license/check-user"; + var client = _cliHttpClientFactory.CreateClient(); - using (var client = new CliHttpClient()) + using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger)) { - using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger)) + if (!response.IsSuccessStatusCode) { - if (!response.IsSuccessStatusCode) - { - throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); - } + throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); + } - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); - var responseContent = await response.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize(responseContent); - } + var responseContent = await response.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize(responseContent); } } catch (Exception) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs index ee736f3aa0..5e039f7f3f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs @@ -21,13 +21,15 @@ namespace Volo.Abp.Cli.ProjectModification public class ProjectNugetPackageAdder : ITransientDependency { public ILogger Logger { get; set; } + public BundleCommand BundleCommand { get; } protected IJsonSerializer JsonSerializer { get; } protected ProjectNpmPackageAdder NpmPackageAdder { get; } protected DerivedClassFinder ModuleClassFinder { get; } protected ModuleClassDependcyAdder ModuleClassDependcyAdder { get; } protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } - public BundleCommand BundleCommand { get; } + + private readonly CliHttpClientFactory _cliHttpClientFactory; public ProjectNugetPackageAdder( IJsonSerializer jsonSerializer, @@ -35,7 +37,8 @@ namespace Volo.Abp.Cli.ProjectModification DerivedClassFinder moduleClassFinder, ModuleClassDependcyAdder moduleClassDependcyAdder, IRemoteServiceExceptionHandler remoteServiceExceptionHandler, - BundleCommand bundleCommand) + BundleCommand bundleCommand, + CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; NpmPackageAdder = npmPackageAdder; @@ -43,6 +46,7 @@ namespace Volo.Abp.Cli.ProjectModification ModuleClassDependcyAdder = moduleClassDependcyAdder; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; BundleCommand = bundleCommand; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -121,7 +125,7 @@ namespace Volo.Abp.Cli.ProjectModification private Task AddToCsprojManuallyAsync(string projectFile, NugetPackageInfo package, string version = null) { var projectFileContent = File.ReadAllText(projectFile); - var doc = new XmlDocument() {PreserveWhitespace = true}; + var doc = new XmlDocument() { PreserveWhitespace = true }; doc.Load(StreamHelper.GenerateStreamFromString(projectFileContent)); var itemGroupNodes = doc.SelectNodes("/Project/ItemGroup"); @@ -162,7 +166,7 @@ namespace Volo.Abp.Cli.ProjectModification private string GetAbpVersionOrNull(string projectFileContent) { - var doc = new XmlDocument() {PreserveWhitespace = true}; + var doc = new XmlDocument() { PreserveWhitespace = true }; doc.Load(StreamHelper.GenerateStreamFromString(projectFileContent)); @@ -173,12 +177,11 @@ namespace Volo.Abp.Cli.ProjectModification protected virtual async Task FindNugetPackageInfoAsync(string packageName) { - using (var client = new CliHttpClient()) - { - var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/byName/?name=" + packageName; - - var response = await client.GetAsync(url); + var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/byName/?name=" + packageName; + var client = _cliHttpClientFactory.CreateClient(); + using (var response = await client.GetAsync(url)) + { if (!response.IsSuccessStatusCode) { if (response.StatusCode == HttpStatusCode.NotFound) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 90f4ff5d8f..683e279a78 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -7,7 +7,6 @@ using System.Linq; using System.Net; using System.Threading.Tasks; using Volo.Abp.Cli.Args; -using Volo.Abp.Cli.Bundling; using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Commands.Services; using Volo.Abp.Cli.Http; @@ -22,6 +21,12 @@ namespace Volo.Abp.Cli.ProjectModification public class SolutionModuleAdder : ITransientDependency { public ILogger Logger { get; set; } + public SourceCodeDownloadService SourceCodeDownloadService { get; } + public SolutionFileModifier SolutionFileModifier { get; } + public NugetPackageToLocalReferenceConverter NugetPackageToLocalReferenceConverter { get; } + public AngularModuleSourceCodeAdder AngularModuleSourceCodeAdder { get; } + public NewCommand NewCommand { get; } + public BundleCommand BundleCommand { get; } protected IJsonSerializer JsonSerializer { get; } protected ProjectNugetPackageAdder ProjectNugetPackageAdder { get; } @@ -31,12 +36,9 @@ namespace Volo.Abp.Cli.ProjectModification protected ProjectNpmPackageAdder ProjectNpmPackageAdder { get; } protected NpmGlobalPackagesChecker NpmGlobalPackagesChecker { get; } protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } - public SourceCodeDownloadService SourceCodeDownloadService { get; } - public SolutionFileModifier SolutionFileModifier { get; } - public NugetPackageToLocalReferenceConverter NugetPackageToLocalReferenceConverter { get; } - public AngularModuleSourceCodeAdder AngularModuleSourceCodeAdder { get; } - public NewCommand NewCommand { get; } - public BundleCommand BundleCommand { get; } + + private readonly CliHttpClientFactory _cliHttpClientFactory; + public SolutionModuleAdder( IJsonSerializer jsonSerializer, @@ -52,7 +54,8 @@ namespace Volo.Abp.Cli.ProjectModification NugetPackageToLocalReferenceConverter nugetPackageToLocalReferenceConverter, AngularModuleSourceCodeAdder angularModuleSourceCodeAdder, NewCommand newCommand, - BundleCommand bundleCommand) + BundleCommand bundleCommand, + CliHttpClientFactory cliHttpClientFactory) { JsonSerializer = jsonSerializer; ProjectNugetPackageAdder = projectNugetPackageAdder; @@ -68,6 +71,7 @@ namespace Volo.Abp.Cli.ProjectModification AngularModuleSourceCodeAdder = angularModuleSourceCodeAdder; NewCommand = newCommand; BundleCommand = bundleCommand; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -131,7 +135,7 @@ namespace Volo.Abp.Cli.ProjectModification { var blazorProject = projectFiles.FirstOrDefault(f => f.EndsWith(".Blazor.csproj")); - if (blazorProject == null || !module.NugetPackages.Any(np=> np.Target == NuGetPackageTarget.Blazor)) + if (blazorProject == null || !module.NugetPackages.Any(np => np.Target == NuGetPackageTarget.Blazor)) { return; } @@ -211,7 +215,7 @@ namespace Volo.Abp.Cli.ProjectModification return; } - var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d=> d.EndsWith(postFix)); + var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d => d.EndsWith(postFix)); if (projectFolderPath == null) { @@ -235,7 +239,7 @@ namespace Volo.Abp.Cli.ProjectModification return; } - var projectFolderPath = Directory.GetDirectories(testPath).FirstOrDefault(d=> d.EndsWith("Domain.Tests")); + var projectFolderPath = Directory.GetDirectories(testPath).FirstOrDefault(d => d.EndsWith("Domain.Tests")); if (projectFolderPath == null) { @@ -250,10 +254,10 @@ namespace Volo.Abp.Cli.ProjectModification return; } - File.WriteAllText(csprojFile, File.ReadAllText(csprojFile).Replace("EntityFrameworkCore","MongoDB")); + File.WriteAllText(csprojFile, File.ReadAllText(csprojFile).Replace("EntityFrameworkCore", "MongoDB")); File.WriteAllText(moduleFile, File.ReadAllText(moduleFile) - .Replace(".EntityFrameworkCore;",".MongoDB;") - .Replace("EntityFrameworkCoreTestModule","MongoDbTestModule")); + .Replace(".EntityFrameworkCore;", ".MongoDB;") + .Replace("EntityFrameworkCoreTestModule", "MongoDbTestModule")); } private async Task AddAngularPackages(string solutionFilePath, ModuleWithMastersInfo module) @@ -355,9 +359,9 @@ namespace Volo.Abp.Cli.ProjectModification ); } - await DeleteRedundantHostProjects(targetModuleFolder,"app"); - await DeleteRedundantHostProjects(targetModuleFolder,"demo"); - await DeleteRedundantHostProjects(targetModuleFolder,"host"); + await DeleteRedundantHostProjects(targetModuleFolder, "app"); + await DeleteRedundantHostProjects(targetModuleFolder, "demo"); + await DeleteRedundantHostProjects(targetModuleFolder, "host"); if (module.MasterModuleInfos == null) { @@ -519,12 +523,11 @@ namespace Volo.Abp.Cli.ProjectModification return await GetEmptyModuleProjectInfoAsync(moduleName, newProTemplate); } - using (var client = new CliHttpClient()) - { - var url = $"{CliUrls.WwwAbpIo}api/app/module/byNameWithDetails/?name=" + moduleName; - - var response = await client.GetAsync(url); + var url = $"{CliUrls.WwwAbpIo}api/app/module/byNameWithDetails/?name=" + moduleName; + var client = _cliHttpClientFactory.CreateClient(); + using (var response = await client.GetAsync(url)) + { if (!response.IsSuccessStatusCode) { if (response.StatusCode == HttpStatusCode.NotFound) @@ -625,7 +628,7 @@ namespace Volo.Abp.Cli.ProjectModification protected virtual async Task IsProjectTiered(string[] projectFiles) { return projectFiles.Select(ProjectFileNameHelper.GetAssemblyNameFromProjectPath) - .Any(p =>p.EndsWith(".HttpApi.Host")) + .Any(p => p.EndsWith(".HttpApi.Host")) && projectFiles.Select(ProjectFileNameHelper.GetAssemblyNameFromProjectPath) .Any(p => p.EndsWith(".IdentityServer")); }