Impedire .NETTO l'accesso alla console?

0

Domanda

Ho implementato l'iniezione di dipendenza nella mia applicazione. E I servizi di configurazione come segue.

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>();

Tutto questo funziona bene, tranne ora che il quadro è la registrazione della console, tra cui il contenuto di un qualsiasi query inviate al database.

In qualche modo l'interno è stata attivata la registrazione ma non riesco a vedere dove mi hai permesso.

Come si può prevenire .Al NETTO di registrazione sullo schermo?

Nota: Logger è un'istanza della mia classe di registrazione ConsoleLogger. Questa classe non implementa ILogger o utilizzare qualsiasi altro .NET. Si tratta semplicemente di una classe personalizzata che registra anche per la console e un file. La registrazione da questo strumento sta lavorando bene. E ho confermato la .NET registri non vengono inviati a questa classe.

Aggiornamento:

Ecco il mio codice che consente di configurare l'host.

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();
}

Ed ecco il codice che chiama.

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

Migliore risposta

1

Nota

Il CreateDefaultBuilder metodo:
...
...
Aggiunge le seguenti provider di log:

  • Console
  • Debug
  • EventSource
  • EventLog (solo quando è in esecuzione su Windows)

Riferimento Predefinito impostazioni del generatore di

Si avrebbe bisogno di rimuovere in modo esplicito il provider predefiniti e aggiungere solo quelli che si desidera.

IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args);

//...

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

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

//...

Si noti che, se si vuole evitare di estensione al di aggiungere i propri fornitori, quindi eseguire la configurazione di registrazione per ultimi, in modo che si è sicuri che i logger sono stati aggiunti.

2021-11-23 20:41:50

Sì, questo è esattamente ciò che succede. Non so perché ConfigureLogging assunto il logging il parametro è di tipo HostBuilderContext ma sono stato in grado di forzare per essere ILoggingBuilder. Grazie per il vostro aiuto.
Jonathan Wood

In altre lingue

Questa pagina è in altre lingue

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