Bagaimana saya mendapatkan Lingkungan Hosting Pengembangan / Pementasan / produksi dalam ConfigureServices
metode di Startup?
public void ConfigureServices(IServiceCollection services)
{
// Which environment are we running under?
}
The ConfigureServices
Metode hanya membutuhkan satu IServiceCollection
parameter.
c#
asp.net-core
asp.net-core-mvc
Muhammad Rehan Saeed
sumber
sumber
IHostingEnvironment
bisa disuntikkan ke ConfigureServices saja? kelalaian? atau alasan yang perlu kita waspadai?Jawaban:
Anda dapat dengan mudah mengaksesnya di ConfigureServices, tetap saja ke properti selama metode Startup yang disebut pertama dan mendapatkannya diteruskan, kemudian Anda dapat mengakses properti dari ConfigureServices.
sumber
CurrentEnvironment.IsEnvironment("environmentname")
.CurrentEnvironment.IsDevelopment()
/CurrentEnvironment.IsProduction()
TL; DR
Setel variabel lingkungan yang dipanggil
ASPNETCORE_ENVIRONMENT
dengan nama lingkungan (misalnyaProduction
). Kemudian lakukan satu dari dua hal:IHostingEnvironment
keStartup.cs
, kemudian menggunakan (env
di sini) untuk memeriksa:env.IsEnvironment("Production")
. Jangan periksa menggunakanenv.EnvironmentName == "Production"
!Startup
kelas yang terpisah atau individuConfigure
/ConfigureServices
fungsi. Jika suatu kelas atau fungsi cocok dengan format ini, mereka akan digunakan sebagai ganti dari opsi standar pada lingkungan itu.Startup{EnvironmentName}()
(seluruh kelas) || contoh:StartupProduction()
Configure{EnvironmentName}()
|| contoh:ConfigureProduction()
Configure{EnvironmentName}Services()
|| contoh:ConfigureProductionServices()
Penjelasan lengkap
.NET Core docs menjelaskan cara melakukannya . Gunakan variabel lingkungan bernama
ASPNETCORE_ENVIRONMENT
yang diatur ke lingkungan yang Anda inginkan, maka Anda memiliki dua pilihan.Periksa nama lingkungan
Dari dokumen :
CATATAN: Memeriksa nilai sebenarnya dari
env.EnvironmentName
yang tidak dianjurkan!Gunakan kelas yang terpisah
Dari dokumen :
sumber
Di
.NET Core 2.0
aplikasi MVC /Microsoft.AspNetCore.All
v2.0.0, Anda dapat memiliki kelas startup khusus lingkungan seperti yang dijelaskan oleh @vaindil tapi saya tidak suka pendekatan itu.Anda juga dapat menyuntikkan
IHostingEnvironment
keStartUp
konstruktor. Anda tidak perlu menyimpan variabel lingkungan diProgram
kelas.sumber
Ini dapat dilakukan tanpa parameter properti atau metode tambahan, seperti:
sumber
Jika Anda perlu menguji ini di suatu tempat di basis kode Anda yang tidak memiliki akses mudah ke IHostingEnvironment, cara lain yang mudah untuk melakukannya adalah seperti ini:
sumber
per dokumen
Anda dapat melakukan sesuatu seperti ini ...
sumber
Saya ingin mendapatkan lingkungan di salah satu layanan saya. Ini sangat mudah dilakukan! Saya hanya menyuntikkannya ke konstruktor seperti ini:
Sekarang nanti dalam kode saya bisa melakukan ini:
EDIT:
Kode di atas adalah untuk .NET Core 2. Untuk versi 3 Anda ingin menggunakannya
IWebHostEnvironment
.sumber
Lingkungan hosting berasal dari variabel lingkungan ASPNET_ENV, yang tersedia selama Startup menggunakan metode ekstensi IHostingEnvironment.IsEnvironment, atau salah satu metode kenyamanan yang sesuai dari IsDevelopment atau IsProduction. Simpan apa yang Anda butuhkan di Startup (), atau di panggilan ConfigureServices:
sumber
IHostingEnvironment
tidak tersedia diConfigureServices
.Hanya untuk berjaga-jaga jika ada yang melihat ini juga. Di .net core 3+ sebagian besar sudah usang. Cara pembaruan adalah:
sumber
Di Dotnet Core 2.0, Startup-constructor hanya mengharapkan parameter-konfigurasi IC.
Bagaimana cara membaca lingkungan hosting di sana? Saya menyimpannya di kelas Program selama ConfigureAppConfiguration (gunakan BuildWebHost penuh alih-alih WebHost.CreateDefaultBuilder):
Semut kemudian membacanya di ConfigureServices seperti ini:
sumber