ConfigureServices yönteminde IHostingEnvironment'a erişme


104

ConfigureServicesGeçerli barındırma ortamı adının 'Geliştirme' olup olmadığını kontrol etmem gerekiyor .

Bu yüzden IHostingEnvironment.IsDevelopment()yöntem kullanmak benim için uygun olabilir, ancak Yapılandırma yönteminin aksine, bende yok IHostingEnvironment env.

Yanıtlar:


132

IHostingEnvironment'ı sürdürmek için yalnızca Başlangıç ​​sınıfında bir özellik oluşturun. Önceden erişiminizin olduğu Başlangıç ​​yapıcısında özelliği ayarlayın, ardından özelliğe ConfigureServices'dan erişebilirsiniz.


36
Asp.Net Core 2.0 için yeni proje şablonları Başlangıç ​​yapıcısında "IHostingEnvironment env" parametresini içermese de, belirtilebilir ve düzgün bir şekilde enjekte edilecektir.
Augusto Barreto

3
Neden içinde ConfigureServicesimkansız?
Alexsandro

2
@Alexsandro_xpt ile ilgili sorunuzun cevabını belgelemek ConfigureServicesimkansızdır, çünkü çerçeve bu belirli yöntem için Bağımlılık Enjeksiyonunu diğer alanlarda olduğu gibi desteklememektedir (muhtemelen bağımlılık enjeksiyonunu yapılandırmak için bu yöntemi kullandığınız için). Joe'nun tanımladığı gibi yapıcı düzeyinde ayarlama sorunu geçici olarak çözmelidir.
Matt Eland

@MarkG Maalesef bu cevap silindi ... Q'su bunun bir kopyası olarak işaretlendi. Yani burada dahil ...
Richard

31

Bunun kopyası olarak işaretlenen sorudan buraya kopyalandı ve silindi . Bir ctor'a kredi .

Erişim IHostingEnvironmentsağlamak ConfigureServicesistiyorsanız, kurucu aracılığıyla enjekte etmeniz ve daha sonra erişim için şurada saklamanız gerekir 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
}

Merhaba, önemli bir şey değil ama dize biçimlendirmesinde environmentküçük harf var, oysa özellik öyle görünüyor Environment.
timmi4sa

1
@BenSmith Bir yazım hatası olduğuna inanıyorum. "IHostingEnvironment artık eskimiş ve onun yerine IHostingEnvironment kullanılmalı. IHostingEnvironment'ın doğru ikamesi nedir?
Blake

Doh! İyi nokta @Blake. Önceki yorumumu sileceğim. Yorumumda "IHostingEnvironment artık eski, onun yerine IWebHostEnvironment kullanılmalı" yazmalıydı.
Ben Smith

Ve daha net olmak gerekirse, IHostingEnvironmentbunun sadece eski olduğu söylenmemeli .Net Core 3.0mi? ( Yöntemin services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);içini çağıran bir 'eve götürme testi' ConfigureServices()üzerinde çalışıyorum ve IHostingEnvironment iyi çalışıyor.
Scott Fraley

@ScottFraley doğru. Bu soru ve cevap .NET Core 2.x zaman çerçevesinden geldiği için (pek çok proje oldukça uzun bir süre kullanılmaya devam edecek) hala geçerlidir.
Richard

3

IHostingEnvironment Çekirdek 3.1'de kullanımdan kaldırıldı

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

hile yapmalı ...

Sonra herhangi bir yerde _env.IsDevelopment()vb ...


0

Bir Startupsınıfı kullanmıyorsanız ve .Configure()doğrudan arıyorsanız, şunlara IHostingEnvironmentveya IWebHostEnvironmentkullanarak erişebilirsiniz GetService:

ASP.NET Core 2.2:

.Configure(app => {
    var hostingEnvironment = app.ApplicationServices.GetService<IHostingEnvironment>();
    if (hostingEnvironment?.IsDevelopment() == true)
    {
        app.UseDeveloperExceptionPage();
    }

    // .. Other stuff
});

ASP.NET Core 3.x:

.Configure(app => {
    var hostingEnvironment = app.ApplicationServices.GetService<IWebHostEnvironment>();
    if (hostingEnvironment?.IsDevelopment() == true)
    {
        app.UseDeveloperExceptionPage();
    }

    // .. Other stuff
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.