ฉันต้องการตรวจสอบ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
});