From ede51c228af77d27d53b0dcf11e8acbd5d52bdd9 Mon Sep 17 00:00:00 2001 From: Karim Beiranvand Date: Tue, 27 Aug 2024 16:20:31 +0200 Subject: [PATCH] 115 --- .../DirectoryManagement.csproj | 15 ++++++ .../DirectoryManagement.generated.sln | 25 +++++++++ .../DirectoryManagement/DirectoryManager.cs | 32 ++++++++++++ .../DirectoryOperations.cs | 26 +++++++--- .../DirectoryManagement/Program.cs | 52 +++++++++++++++---- .../DirectoryManagement/appsettings.json | 11 ++++ 6 files changed, 143 insertions(+), 18 deletions(-) create mode 100644 WorkingCirculation/DirectoryManagement/DirectoryManagement.generated.sln create mode 100644 WorkingCirculation/DirectoryManagement/DirectoryManager.cs create mode 100644 WorkingCirculation/DirectoryManagement/appsettings.json diff --git a/WorkingCirculation/DirectoryManagement/DirectoryManagement.csproj b/WorkingCirculation/DirectoryManagement/DirectoryManagement.csproj index 206b89a9..9484d1c7 100644 --- a/WorkingCirculation/DirectoryManagement/DirectoryManagement.csproj +++ b/WorkingCirculation/DirectoryManagement/DirectoryManagement.csproj @@ -7,4 +7,19 @@ enable + + + + + + + + + + + + + + + diff --git a/WorkingCirculation/DirectoryManagement/DirectoryManagement.generated.sln b/WorkingCirculation/DirectoryManagement/DirectoryManagement.generated.sln new file mode 100644 index 00000000..dc22a1ff --- /dev/null +++ b/WorkingCirculation/DirectoryManagement/DirectoryManagement.generated.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DirectoryManagement", "DirectoryManagement.csproj", "{1ACA348A-D9D2-4F8B-8436-16EF8FE4D909}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1ACA348A-D9D2-4F8B-8436-16EF8FE4D909}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1ACA348A-D9D2-4F8B-8436-16EF8FE4D909}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1ACA348A-D9D2-4F8B-8436-16EF8FE4D909}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1ACA348A-D9D2-4F8B-8436-16EF8FE4D909}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {36E1DD06-6C7D-47EA-B810-3C65492B57DB} + EndGlobalSection +EndGlobal diff --git a/WorkingCirculation/DirectoryManagement/DirectoryManager.cs b/WorkingCirculation/DirectoryManagement/DirectoryManager.cs new file mode 100644 index 00000000..3ef7a744 --- /dev/null +++ b/WorkingCirculation/DirectoryManagement/DirectoryManager.cs @@ -0,0 +1,32 @@ +using Microsoft.Extensions.Logging; + +namespace DirectoryManagement +{ + public interface IDirectoryManager + { + public void Run(); + } + + public class DirectoryManager(ILogger logger, IDirectoryOperations directoryOperations) : IDirectoryManager + { + private readonly ILogger logger = logger; + private readonly IDirectoryOperations directoryOperations = directoryOperations; + + public void Run() + { + string choice = "2"; + string workingDirectory = Environment.GetCommandLineArgs()[1]; + + if (choice == "1") + { + string commandToExecute = Environment.GetCommandLineArgs()[2]; + directoryOperations.OpenDirectoryThroughCommandLine(commandToExecute, workingDirectory); + } + + if (choice == "2") + { + directoryOperations.OpenDirectoryThroughExplorer(workingDirectory); + } + } + } +} \ No newline at end of file diff --git a/WorkingCirculation/DirectoryManagement/DirectoryOperations.cs b/WorkingCirculation/DirectoryManagement/DirectoryOperations.cs index 0397ee5a..2b303836 100644 --- a/WorkingCirculation/DirectoryManagement/DirectoryOperations.cs +++ b/WorkingCirculation/DirectoryManagement/DirectoryOperations.cs @@ -1,12 +1,23 @@ using System.Diagnostics; +using Microsoft.Extensions.Logging; namespace DirectoryManagement { - internal class DirectoryOperations { - public static void OpenDirectoryThroughExplorer(string directoryPath){ - if(Directory.Exists(directoryPath)) + public interface IDirectoryOperations + { + public void OpenDirectoryThroughExplorer(string directoryPath); + + public void OpenDirectoryThroughCommandLine(string commandToExecute, string workingDirectory); + } + public class DirectoryOperations(ILogger logger) : IDirectoryOperations + { + private readonly ILogger logger = logger; + + public void OpenDirectoryThroughExplorer(string directoryPath) + { + if (Directory.Exists(directoryPath)) { - ProcessStartInfo startInfo = new ProcessStartInfo + ProcessStartInfo startInfo = new() { Arguments = directoryPath, FileName = "explorer.exe" @@ -16,12 +27,13 @@ public static void OpenDirectoryThroughExplorer(string directoryPath){ } - public static void OpenDirectoryThroughCommandLine(string commandToExecute, string workingDirectory) { - Process process = new Process(); + public void OpenDirectoryThroughCommandLine(string commandToExecute, string workingDirectory) + { + Process process = new(); process.StartInfo.WorkingDirectory = workingDirectory; process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = $"/c {commandToExecute}"; - process.StartInfo.RedirectStandardOutput= true; + process.StartInfo.RedirectStandardOutput = true; process.Start(); process.WaitForExit(); string output = process.StandardOutput.ReadToEnd(); diff --git a/WorkingCirculation/DirectoryManagement/Program.cs b/WorkingCirculation/DirectoryManagement/Program.cs index 6006f97f..9024d559 100644 --- a/WorkingCirculation/DirectoryManagement/Program.cs +++ b/WorkingCirculation/DirectoryManagement/Program.cs @@ -1,15 +1,45 @@ using DirectoryManagement; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Serilog; -string choice = "2"; -string workingDirectory = Environment.GetCommandLineArgs()[1]; - -if(choice == "1") +internal class Program { - string commandToExecute = Environment.GetCommandLineArgs()[2]; - DirectoryOperations.OpenDirectoryThroughCommandLine(commandToExecute, workingDirectory); -} + private static void Main(string[] args) + { -if(choice == "2") -{ - DirectoryOperations.OpenDirectoryThroughExplorer(workingDirectory); -} + var builder = new ConfigurationBuilder(); + BuildConfig(builder); + + Log.Logger = new LoggerConfiguration() + .ReadFrom.Configuration(builder.Build()) + .Enrich.FromLogContext() + .WriteTo.Console() + .CreateLogger(); + + Log.Logger.Information("Application starting ..."); + + var host = Host.CreateDefaultBuilder() + .ConfigureServices((context, services) => + { + services.AddTransient(); + services.AddTransient(); + }) + .UseSerilog() + .Build(); + + var svc = ActivatorUtilities.CreateInstance(host.Services); + svc.Run(); + + } + + + static void BuildConfig(IConfigurationBuilder builder) + { + builder.SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Prodcution"}.json", optional: true) + .AddEnvironmentVariables(); + } +} \ No newline at end of file diff --git a/WorkingCirculation/DirectoryManagement/appsettings.json b/WorkingCirculation/DirectoryManagement/appsettings.json new file mode 100644 index 00000000..d86fcd2c --- /dev/null +++ b/WorkingCirculation/DirectoryManagement/appsettings.json @@ -0,0 +1,11 @@ +{ + "Serilog": { + "MinimumLevel": { + "Default": "Information", + "Override": { + "Microsoft": "Information", + "System": "Warning" + } + } + } +} \ No newline at end of file