« Application console » : différence entre les versions

De Banane Atomic
Aller à la navigationAller à la recherche
Ligne 124 : Ligne 124 :
         x.ClearProviders();
         x.ClearProviders();
         x.AddConsole();
         x.AddConsole();
    })
    .ConfigureServices(x =>
    {
        x.AddSingleton<MyClass>();
     });
     });
using var host = hostBuilder.Build();
using var host = hostBuilder.Build();
Ligne 133 : Ligne 129 :
var logger = host.Services.GetService<ILoggerFactory>()?.CreateLogger<Program>() ?? throw new NullReferenceException("ILoggerFactory service");
var logger = host.Services.GetService<ILoggerFactory>()?.CreateLogger<Program>() ?? throw new NullReferenceException("ILoggerFactory service");
logger.LogDebug("Starting application");
logger.LogDebug("Starting application");
var myClass = host.Services.GetService<MyClass>() ?? throw new NullReferenceException("MyClass service");
// await host.RunAsync();
</filebox>
</filebox>



Version du 27 août 2023 à 12:57

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.Hosting
Program.cs
var hostBuilder =  Host.CreateDefaultBuilder(args)
    .ConfigureServices(x =>
    {
        x.AddSingleton<MyService>();
    });
using var host = hostBuilder.Build();

var myService = host.Services.GetService<MyService>() ?? throw new NullReferenceException("MyService service");

// await host.RunAsync();

Logging in .Net Core Console Apps

Bash.svg
dotnet add package Microsoft.Extensions.Logging.Console
Program.cs
var hostBuilder =  Host.CreateDefaultBuilder(args)
    .ConfigureLogging(x => 
    {
        x.ClearProviders();
        x.AddConsole();
    });
using var host = hostBuilder.Build();

var logger = host.Services.GetService<ILoggerFactory>()?.CreateLogger<Program>() ?? throw new NullReferenceException("ILoggerFactory service");
logger.LogDebug("Starting application");

Configuration

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

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

    Configuration = builder.Build();

    var value1 = Configuration.GetValue<string>("section1");
    var value2 = Configuration.GetValue<int>("section2");
    var values = Configuration.GetSection("section3").Get<string[]>();
MyProject.csproj
<!-- copy the appsettings.json file in the output folder -->
<ItemGroup>
  <None Include="appsettings.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

Entity Framework Core

Program.cs
// nuget package: Microsoft.Extensions.Hosting

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);  // allow to use scaffold with a named connection string

var connectionString = builder.Configuration.GetConnectionString("DB1");
var serverVersion = new MariaDbServerVersion(new Version(11, 0, 2));

builder.Services.AddDbContext<DB1Context>(
    dbContextOptions => dbContextOptions
        .UseMySql(connectionString, serverVersion)
        // TODO The following three options help with debugging, but should be changed or removed for production.
        .LogTo(Console.WriteLine, LogLevel.Information)
        .EnableSensitiveDataLogging()
        .EnableDetailedErrors());

builder.Services.AddTransient<ItemRepository>();

using IHost host = builder.Build();

var itemRepository = host.Services.GetService<ItemRepository>();
if (itemRepository is not null)
{
    await itemRepository.GetAllItemsAsync();
}

//await host.RunAsync();