Předcházet .NET od přihlášení do konzole?

0

Otázka

Jsem implementoval závislost injekce v mé aplikaci. A já konfigurace služby takto.

IConfiguration configuration = context.Configuration;

services.AddDbContext<ApplicationDbContext>(options =>
{
    options.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
});

services.ConfigureRailIncApi(configuration);

services.Configure<EmailSettings>(configuration.GetSection("EmailSettings"));

services.AddSingleton(configuration);
services.AddSingleton(Logger);

services.AddSingleton<Application>();
services.AddSingleton<ServiceManager>();

Tohle všechno funguje v pořádku až na to, že rámec je přihlášení do konzole, včetně obsahu jakékoliv dotazy do databáze.

Nějak vnitřní protokolování povoleno, ale nevidím, kde jsem ji povolili.

Jak mohu zabránit .NET od přihlášení na obrazovku?

Poznámka: Logger je příklad z mé vlastní třídy protokolování ConsoleLogger. Tato třída neimplementuje ILogger nebo použít něco jiného .NET. To je prostě vlastní třídu, která také zaznamenává do konzole a souboru. Přihlášení z této ústředny je v pořádku. A já jsem potvrdil .ČISTÉ záznamy nejsou odeslány do této třídy.

Aktualizace:

Tady je můj kód, který nastaví hostitele.

public void Configure(string[] args, Action< HostBuilderContext, IServiceCollection> configureServices, Action<IHostBuilder> configureHost)
{
    IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args);

    hostBuilder.ConfigureServices((context, services) =>
    {
        services.AddSingleton(this);
        configureServices(context, services);
    });

    configureHost(hostBuilder);

    AppHost = hostBuilder.Build();
}

A tady je kód, který jej volá.

ApplicationServices appServices = new();

appServices.Configure(args, (context, services) =>
{
    IConfiguration configuration = context.Configuration;

    services.AddDbContext<ApplicationDbContext>(options =>
    {
        options.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
    });

    services.ConfigureRailIncApi(configuration);

    services.Configure<EmailSettings>(configuration.GetSection("EmailSettings"));

    services.AddSingleton(configuration);
    services.AddSingleton(Logger);

    services.AddSingleton<Application>();
    services.AddSingleton<ServiceManager>();
},
builder =>
{

});
.net-6.0 .net-core c# ilogger
2021-11-23 19:36:35
1

Nejlepší odpověď

1

Poznámka

Na CreateDefaultBuilder metoda:
...
...
Přidává následující protokolování služeb:

  • Konzole
  • Ladění
  • EventSource
  • EventLog (pouze tehdy, když běží na Windows)

Referenční Výchozí nastavení builder

Musíte explicitně odstranit výchozí poskytovatelů a přidat pouze ty, které chcete.

IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args);

//...

hostBuilder.ConfigureLogging(logging => {
    logging.ClearProviders();

    //... add my providers here
});

//...

Všimněte si, že pokud chcete, aby se zabránilo další rozšíření je přidání vlastních služeb, pak provádět protokolování konfigurace poslední, takže jste si jisti, o tom, které dřevorubci byly přidány.

2021-11-23 20:41:50

Ano, to je přesně to, co se děje. Nejsem si jistý, proč ConfigureLogging předpokládal logging parametr je typu HostBuilderContext ale byl jsem schopen donutit, aby to bylo ILoggingBuilder. Díky za vaši pomoc.
Jonathan Wood

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................