ฉันต้องการตรวจสอบConfigureServices
วิธีการว่าชื่อสภาพแวดล้อมการโฮสต์ปัจจุบันเป็น 'การพัฒนา' หรือไม่
ดังนั้นการใช้IHostingEnvironment.IsDevelopment()
วิธีการอาจจะโอเคสำหรับผม IHostingEnvironment env
แต่แตกต่างในวิธีการกำหนดค่าฉันไม่ได้มี
ฉันต้องการตรวจสอบConfigureServices
วิธีการว่าชื่อสภาพแวดล้อมการโฮสต์ปัจจุบันเป็น 'การพัฒนา' หรือไม่
ดังนั้นการใช้IHostingEnvironment.IsDevelopment()
วิธีการอาจจะโอเคสำหรับผม IHostingEnvironment env
แต่แตกต่างในวิธีการกำหนดค่าฉันไม่ได้มี
คำตอบ:
เพียงแค่สร้างคุณสมบัติในคลาส Startup เพื่อคงไว้ซึ่ง IHostingEnvironment ตั้งค่าคุณสมบัติในตัวสร้างการเริ่มต้นที่คุณมีสิทธิ์เข้าถึงแล้วคุณสามารถเข้าถึงคุณสมบัติจาก ConfigureServices
ConfigureServices
มันเป็นไปไม่ได้?
ConfigureServices
เป็นไปไม่ได้เนื่องจากกรอบงานไม่รองรับ Dependency Injection สำหรับวิธีการเฉพาะนั้นเหมือนในพื้นที่อื่น ๆ (อาจเป็นเพราะคุณใช้วิธีนี้ในการกำหนดค่าการฉีดแบบพึ่งพา) การตั้งค่าที่ระดับตัวสร้างตามที่โจอธิบายไว้ควรแก้ไขปัญหานี้
คัดลอกมาจากคำถามที่มีการทำเครื่องหมายว่าซ้ำกับคนนี้และลบ เครดิตa-ctor .
หากคุณต้องการที่จะเข้าถึงIHostingEnvironment
ในConfigureServices
ที่คุณจะต้องฉีดผ่านทางสร้างและเก็บไว้สำหรับการเข้าถึงในภายหลัง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
}
environment
Environment
IHostingEnvironment
ล้าสมัยแล้ว.Net Core 3.0
หรือไม่? (ฉันกำลังดำเนินการ 'ทำแบบทดสอบที่บ้าน' ซึ่งเรียกservices.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
ใช้ConfigureServices()
วิธีการนี้และ IHostingEnvironment ทำงานได้ดี
IHostingEnvironment
เลิกใช้แล้วใน Core 3.1
private readonly IWebHostEnvironment _env;
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
_env = env;
Configuration = configuration;
}
ควรทำเคล็ดลับ ...
จากนั้นอ้างอิงได้ทุกที่ด้วย_env.IsDevelopment()
ฯลฯ ...
หากคุณไม่ได้ใช้Startup
ชั้นเรียนและกำลังโทร.Configure()
โดยตรงคุณสามารถเข้าถึงIHostingEnvironment
หรือIWebHostEnvironment
ใช้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
});