Zugriff auf die IHostingEnvironment in der ConfigureServices-Methode


100

Ich muss die ConfigureServicesMethode einchecken , ob der aktuelle Name der Hosting-Umgebung "Entwicklung" lautet.

Die Verwendung der IHostingEnvironment.IsDevelopment()Methode mag für mich in Ordnung sein, aber im Gegensatz zur Methode "Konfigurieren" habe ich keine IHostingEnvironment env.

Antworten:


128

Erstellen Sie einfach eine Eigenschaft in der Startup-Klasse, um die IHostingEnvironment beizubehalten. Legen Sie die Eigenschaft im Startkonstruktor fest, auf den Sie bereits Zugriff haben, und greifen Sie dann über ConfigureServices auf die Eigenschaft zu


34
Obwohl die neuen Projektvorlagen für Asp.Net Core 2.0 den Parameter "IHostingEnvironment env" nicht im Startup-Konstruktor enthalten, kann er angegeben werden und wird ordnungsgemäß eingefügt.
Augusto Barreto

3
Warum ConfigureServicesist es unmöglich?
Alexsandro

2
@Alexsandro_xpt, um die Antwort auf Ihre Frage zu dokumentieren ConfigureServices, ist unmöglich, da das Framework die Abhängigkeitsinjektion für diese bestimmte Methode nicht wie in anderen Bereichen unterstützt (wahrscheinlich, weil Sie diese Methode zum Konfigurieren der Abhängigkeitsinjektion verwenden). Die Einstellung auf Konstruktorebene, wie von Joe beschrieben, sollte das Problem umgehen.
Matt Eland

@MarkG Leider wird diese Antwort gelöscht ... das Q wurde als Duplikat dieser markiert. Also auch hier ...
Richard

26

Hier von der Frage kopiert, die als Duplikat dieser Frage markiert und gelöscht wurde . Gutschrift an a-ctor .

Wenn Sie zugreifen möchten IHostingEnvironmentin ConfigureServicesSie müssen es über den Konstruktor injizieren und speichern sie für einen späteren Zugriff in 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
}

Hallo, es ist keine große Sache, aber in der Zeichenfolgenformatierung environmentist das Kleinbuchstaben, während die Eigenschaft zu sein scheint Environment.
timmi4sa

1
@ BenSmith Ich glaube du hast einen Tippfehler. Sie wiederholten IHostingEnvironment in Ihrer Aussage "IHostingEnvironment ist jetzt veraltet und IHostingEnvironment sollte stattdessen verwendet werden. Was ist der richtige Ersatz für IHostingEnvironment?
Blake

Doh! Guter Ort @Blake. Ich werde meinen vorherigen Kommentar löschen. Mein Kommentar hätte lauten sollen "IHostingEnvironment ist jetzt veraltet, stattdessen sollte IWebHostEnvironment verwendet werden".
Ben Smith

Und um ganz klar zu sein, sollte man nicht sagen, dass dies IHostingEnvironmenterst ab veraltet ist .Net Core 3.0? (Ich arbeite an einem "Take-Home-Test", der services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);die ConfigureServices()Methode aufruft, und IHostingEnvironment funktioniert einwandfrei.
Scott Fraley

@ScottFraley richtig. Da diese Frage und Antwort aus dem Zeitrahmen von .NET Core 2.x stammt (den viele Projekte noch einige Zeit verwenden werden), gilt sie weiterhin.
Richard

0

IHostingEnvironment ist in Core 3.1 veraltet

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

sollte den Trick machen ...

Dann verweisen Sie überall mit _env.IsDevelopment()etc ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.