Accesso a IHostingEnvironment nel metodo ConfigureServices


100

Devo controllare nel ConfigureServicesmetodo se il nome dell'ambiente di hosting corrente è "Sviluppo".

Quindi l'utilizzo del IHostingEnvironment.IsDevelopment()metodo potrebbe essere ok per me, ma a differenza del metodo Configure, non ce l'ho IHostingEnvironment env.

Risposte:


128

basta creare una proprietà nella classe Startup per rendere persistente l'IHostingEnvironment. Imposta la proprietà nel costruttore Startup a cui hai già accesso, quindi puoi accedere alla proprietà da ConfigureServices


34
Anche se i nuovi modelli di progetto per Asp.Net Core 2.0 non includono il parametro "IHostingEnvironment env" nel costruttore Startup, può essere specificato e verrà inserito correttamente.
Augusto Barreto

3
Perché ConfigureServicesè impossibile?
Alexsandro

2
@Alexsandro_xpt per documentare la risposta alla tua domanda ConfigureServices, è impossibile perché il framework non supporta l'inserimento delle dipendenze per quel particolare metodo come fa in altre aree (probabilmente perché usi questo metodo per configurare l'inserimento delle dipendenze). L'impostazione a livello di costruttore come descritto da Joe dovrebbe risolvere il problema.
Matt Eland

@MarkG Sfortunatamente quella risposta è stata cancellata ... la sua Q è stata contrassegnata come un duplicato di questa. Quindi incluso qui ...
Richard

26

Copiato qui dalla domanda contrassegnata come duplicata di questa ed eliminata . Ringraziamo un attore .

Se si desidera accedere IHostingEnvironmentin ConfigureServicessi dovrà iniettare tramite il costruttore e conservarla per l'accesso in seguito a ConfigureServices:

public class Startup
{
    public Startup(IConfiguration configuration, IHostingEnvironment environment)
    {
        Configuration = configuration;
        Environment = environment;
    }

    public IConfiguration Configuration { get; }

    public IHostingEnvironment Environment { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        System.Console.WriteLine($"app: {Environment.ApplicationName}");
    }

    // rest omitted
}

Ciao, non è un grosso problema, ma nella formattazione della stringa environmentè minuscolo, mentre la proprietà sembra esserlo Environment.
timmi4sa

1
@ BenSmith, credo che tu abbia un errore di battitura. Hai ripetuto IHostingEnvironment nella tua dichiarazione "IHostingEnvironment è ora obsoleto e al suo posto dovrebbe essere utilizzato IHostingEnvironment. Qual è la sostituzione corretta per IHostingEnvironment?
Blake

Doh! Buon posto @ Blake. Eliminerò il mio commento precedente. Il mio commento avrebbe dovuto leggere "IHostingEnvironment ora è obsoleto, dovrebbe essere utilizzato IWebHostEnvironment".
Ben Smith

E per essere più chiari, non si dovrebbe dire che IHostingEnvironmentè obsoleto solo a partire da .Net Core 3.0? (Sto lavorando a un "test da portare a casa" che chiama services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);all'interno del ConfigureServices()metodo e IHostingEnvironment sta funzionando bene.
Scott Fraley

@ScottFraley corretto. Poiché questa domanda e risposta provengono dal lasso di tempo di .NET Core 2.x (che molti progetti continueranno a utilizzare per un bel po 'di tempo), si applica ancora.
Richard

1

IHostingEnvironment è deprecato in Core 3.1

        private readonly IWebHostEnvironment _env;
   
        public Startup(IConfiguration configuration, IWebHostEnvironment env)
        {
            _env = env;
            Configuration = configuration;
        }

dovrebbe fare il trucco ...

Quindi fare riferimento ovunque con _env.IsDevelopment()ecc ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.