Skip to content

Commit

Permalink
115
Browse files Browse the repository at this point in the history
  • Loading branch information
beiranvand-karim committed Aug 27, 2024
1 parent 6293404 commit ede51c2
Show file tree
Hide file tree
Showing 6 changed files with 143 additions and 18 deletions.
15 changes: 15 additions & 0 deletions WorkingCirculation/DirectoryManagement/DirectoryManagement.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,19 @@
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
</ItemGroup>

<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<None Update="appsettings.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

<ItemGroup Condition="'$(Configuration)' == 'Release'">
<None Update="appsettings.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -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
32 changes: 32 additions & 0 deletions WorkingCirculation/DirectoryManagement/DirectoryManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Microsoft.Extensions.Logging;

namespace DirectoryManagement
{
public interface IDirectoryManager
{
public void Run();
}

public class DirectoryManager(ILogger<DirectoryManager> logger, IDirectoryOperations directoryOperations) : IDirectoryManager
{
private readonly ILogger<DirectoryManager> 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);
}
}
}
}
26 changes: 19 additions & 7 deletions WorkingCirculation/DirectoryManagement/DirectoryOperations.cs
Original file line number Diff line number Diff line change
@@ -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<DirectoryOperations> logger) : IDirectoryOperations
{
private readonly ILogger<DirectoryOperations> logger = logger;

public void OpenDirectoryThroughExplorer(string directoryPath)
{
if (Directory.Exists(directoryPath))
{
ProcessStartInfo startInfo = new ProcessStartInfo
ProcessStartInfo startInfo = new()
{
Arguments = directoryPath,
FileName = "explorer.exe"
Expand All @@ -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();
Expand Down
52 changes: 41 additions & 11 deletions WorkingCirculation/DirectoryManagement/Program.cs
Original file line number Diff line number Diff line change
@@ -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<IDirectoryManager, DirectoryManager>();
services.AddTransient<IDirectoryOperations, IDirectoryOperations>();
})
.UseSerilog()
.Build();

var svc = ActivatorUtilities.CreateInstance<DirectoryManager>(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();
}
}
11 changes: 11 additions & 0 deletions WorkingCirculation/DirectoryManagement/appsettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Information",
"System": "Warning"
}
}
}
}

0 comments on commit ede51c2

Please sign in to comment.