Как я могу получить ASP.NET Основная среда в статическом вспомогательном методе?

#c# #asp.net-core

#c# #asp.net-ядро

Вопрос:

Я не могу использовать внедрение зависимостей, у меня есть статический вспомогательный класс со статическими методами в моем ASP.NET Основной проект. Какой самый простой способ определить, что приложение запущено в среде разработки?

Эквивалент:

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment()) // -> this env is what I'm looking for
    {
        app.UseDeveloperExceptionPage();
        app.UseMigrationsEndPoint();
    }
    ...
}
 

Как я могу получить env вручную без DI?

Комментарии:

1. Почему они определены как статические методы? Почему бы вам не сделать их нестатическими и не создать их класс с использованием контейнера IoC?

2. По причинам, выходящим за рамки этого вопроса. Это большой проект, они просто являются статическими методами в вспомогательном классе. Такова реальность.

3. Есть ли причина, по которой вы не можете создать нестатический класс для этого?

Ответ №1:

Учитывая, что запуск — это самое первое, что выполняется на ASP.NET Основное приложение (после того, как хост встроен в основной программный класс), доступны очень простые решения:

 public class Startup 
{
    public static IWebHostEnvironment Environment { get; }

    public Startup(IWebHostEnvironment environment)
    {
        Environment = environment;
    }
}
 

Обратите внимание, что правильное решение, однако, не смешивать внедрение зависимостей со статическими классами.