Truy cập IHostingEnosystem trong phương thức ConfigureServices


100

Tôi cần kiểm tra ConfigureServicesphương pháp xem tên môi trường lưu trữ hiện tại có phải là 'Phát triển' hay không.

Vì vậy, sử dụng IHostingEnvironment.IsDevelopment()phương pháp có thể ổn đối với tôi, nhưng không giống như trong phương pháp Cấu hình, tôi không có IHostingEnvironment env.

Câu trả lời:


128

chỉ cần tạo một thuộc tính trong lớp Khởi động để duy trì IHostingEnosystem. Đặt thuộc tính trong phương thức khởi tạo Startup mà bạn đã có quyền truy cập, sau đó bạn có thể truy cập thuộc tính từ ConfigureServices


34
Mặc dù các mẫu dự án mới cho Asp.Net Core 2.0 không bao gồm tham số "IHostingEnosystem env" trong phương thức khởi tạo Startup, nó có thể được chỉ định và nó sẽ được đưa vào đúng cách.
Augusto Barreto,

3
Tại sao trong ConfigureServicesnó là không thể?
Alexsandro

2
@Alexsandro_xpt để ghi lại câu trả lời cho câu hỏi của bạn ConfigureServices, điều đó là không thể vì khuôn khổ không hỗ trợ Dependency Injection cho phương pháp cụ thể đó như cách nó thực hiện trong các lĩnh vực khác (có thể do bạn sử dụng phương pháp này để định cấu hình phụ thuộc). Đặt ở cấp phương thức khởi tạo như Joe đã mô tả sẽ giải quyết được vấn đề.
Matt Eland

@MarkG Rất tiếc, câu trả lời đó đã bị xóa ... chữ Q của nó đã được đánh dấu là bản sao của câu trả lời này. Vì vậy, bao gồm ở đây ...
Richard

26

Đã sao chép ở đây từ câu hỏi được đánh dấu là bản sao của câu hỏi này và đã bị xóa . Tín dụng cho a-ctor .

Nếu bạn muốn truy cập IHostingEnvironmenttrong, ConfigureServicesbạn sẽ phải đưa nó qua hàm tạo và lưu trữ để truy cập sau trong 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
}

Xin chào, nó không phải là một vấn đề lớn nhưng trong định dạng chuỗi environmentlà chữ thường, trong khi thuộc tính có vẻ như vậy Environment.
timmi4sa 27/10 '19

1
@BenSmith Tôi tin rằng bạn mắc lỗi chính tả. Bạn lặp lại IHostingEnvironment trong bản Tuyên Bố của bạn "IHostingEnvironment bây giờ đã lỗi thời và IHostingEnvironment nên được sử dụng thay vì việc thay đổi chính xác cho IHostingEnvironment là gì.?
Blake

Doh! Điểm tốt @Blake. Tôi sẽ xóa bình luận trước đây của mình. Nhận xét của tôi nên đọc "IHostingEnosystem hiện đã lỗi thời, nên sử dụng IWebHostEnosystem thay thế".
Ben Smith

Và cần phải nói rõ hơn, không nên nói rằng IHostingEnvironmentnó chỉ là lỗi thời .Net Core 3.0? (Tôi đang thực hiện một 'bài kiểm tra mang về nhà' gọi services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);bên trong ConfigureServices()phương pháp và IHostingEnosystem đang hoạt động tốt.
Scott Fraley

@ScottFraley đúng. Vì câu hỏi và câu trả lời này đến từ khung thời gian .NET Core 2.x (mà nhiều dự án sẽ tiếp tục sử dụng trong một thời gian khá dài) nên nó vẫn được áp dụng.
Richard

1

IHostingEnvironment không được dùng nữa trong Core 3.1

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

nên làm thủ thuật ...

Sau đó, tham khảo bất cứ nơi nào với _env.IsDevelopment()vv ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.