« Application console » : différence entre les versions

De Banane Atomic
Aller à la navigationAller à la recherche
Ligne 3 : Ligne 3 :
= Liens =
= Liens =
* [[Command_Line_Parser_Library|Command Line Parser Library]]
* [[Command_Line_Parser_Library|Command Line Parser Library]]
* [[CSharp_7.1#Async_Main|Async Main]]


= Code =
= Code =

Version du 15 décembre 2021 à 17:13

Liens

Code

Csharp.svg
using System;

namespace MonNS
{
    class MaClasse
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("");
        }
    }
}

Read input

Cs.svg
ConsoleKeyInfo keyInfo = Console.ReadKey(true);
if (keyInfo.Key == ConsoleKey.Escape) { }

Masquer la saisie d'un mot de passe

Csharp.svg
public static string ReadPassword()
{
    string password = "";
    ConsoleKeyInfo info = Console.ReadKey(true);
    while (info.Key != ConsoleKey.Enter)
    {
        if (info.Key != ConsoleKey.Backspace)
        {
            Console.Write("*");
            password += info.KeyChar;
        }
        else if (info.Key == ConsoleKey.Backspace)
        {
            if (!string.IsNullOrEmpty(password))
            {
                // remove one character from the list of password characters
                password = password.Substring(0, password.Length - 1);

                // get the location of the cursor
                int pos = Console.CursorLeft;

                // move the cursor to the left by one character
                Console.SetCursorPosition(pos - 1, Console.CursorTop);

                // replace it with space
                Console.Write(" ");

                // move the cursor to the left by one character again
                Console.SetCursorPosition(pos - 1, Console.CursorTop);
            }
        }

        info = Console.ReadKey(true);
    }

    // add a new line because user pressed enter at the end of their password
    Console.WriteLine();

    return password;
}

Masquer la fenêtre de la Console

Csharp.svg
[DllImport("kernel32.dll")]
private static extern IntPtr GetConsoleWindow();

[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

private const int SW_HIDE = 0;
private const int SW_SHOW = 5;

var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);

Couleurs

Cs.svg
Console.BackgroundColor = ConsoleColor.DarkRed;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("...");
Console.ResetColor();

Dependency injection

Bash.svg
dotnet add package Microsoft.Extensions.DependencyInjection
Program.cs
static void Main(string[] args)
{
    ServiceProvider serviceProvider = ConfigureServices(services);

    IServiceScope scope = serviceProvider.CreateScope();
    scope.ServiceProvider.GetRequiredService<ConsoleApplication>().Run();

    serviceProvider.GetRequiredService<ConsoleApplication>().Run();
}

private static ServiceProvider ConfigureServices(IServiceCollection services) =>
    new ServiceCollection()
        .AddSingleton<IConfiguration>(
            _ => new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false);
                .AddUserSecrets<Program>()
                .Build())
        .AddSingleton<IMyService, MyService>()
        .BuildServiceProvider();
ConsoleApplication.cs
class ConsoleApplication
{
    private readonly IConfiguration configuration;
    private readonly IMyService myService;

    public ConsoleApplication(IConfiguration configuration, IMyService myService)
    {
        this.configuration = configuration;
        this.myService = myService;
    }

    public void Run()
    {
        var serviceProvider = ConfigureServices();
        using var dbContext = serviceProvider.GetService<AppDbContext>();

        myService.DoSomething();
    }

    private ServiceProvider ConfigureServices()
        => new ServiceCollection()
            .AddDbContext<AppDbContext>(
                x => x.UseMySql(BuildConnectionString(),
                    mySqlOptions => mySqlOptions.ServerVersion("10.5.8-mariadb")))
            .BuildServiceProvider();

    private string BuildConnectionString()
    {
        var connectionStringBuilder = new SqlConnectionStringBuilder("server=localhost;database=test;user=test;");
        connectionStringBuilder.Password = configuration["DbPassword"];

        return connectionStringBuilder.ConnectionString;
    }
}

Logging in .Net Core Console Apps

Bash.svg
dotnet add package Microsoft.Extensions.Logging
dotnet add package Microsoft.Extensions.Logging.Console
Program.cs
static void Main(string[] args)
{
    var services = new ServiceCollection();
    ConfigureServices(services);

    // log
    var serviceProvider = services.BuildServiceProvider();
    var logger = serviceProvider.GetService<ILoggerFactory>()
                                .CreateLogger<Program>();
    logger.LogDebug("Starting application");
}

private static void ConfigureServices(IServiceCollection services)
{
    services.AddLogging(configure => configure.AddConsole());
}

Configuration

Bash.svg
dotnet add package Microsoft.Extensions.Configuration.Json
Program.cs
private static IConfiguration Configuration;

static void Main(string[] args)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(AppContext.BaseDirectory)
        .AddJsonFile("appsettings.json");

    Configuration = builder.Build();