Как получить среду хостинга для разработки / организации / производства в ConfigureServices
методе Startup?
public void ConfigureServices(IServiceCollection services)
{
// Which environment are we running under?
}
ConfigureServices
Метод только принимает один IServiceCollection
параметр.
c#
asp.net-core
asp.net-core-mvc
Мухаммед Рехан Саид
источник
источник
IHostingEnvironment
просто ввести в ConfigureServices? надзор? или причину, которую мы должны знать?Ответы:
Вы можете легко получить к нему доступ в ConfigureServices, просто сохранить его в свойстве во время запуска метода, который сначала вызывается и получает его, затем вы можете получить доступ к свойству из ConfigureServices.
источник
CurrentEnvironment.IsEnvironment("environmentname")
.CurrentEnvironment.IsDevelopment()
/CurrentEnvironment.IsProduction()
TL; DR
Установите переменную среды, вызываемую
ASPNETCORE_ENVIRONMENT
с именем среды (напримерProduction
). Затем сделайте одно из двух:IHostingEnvironment
вStartup.cs
, а затем использовать что (env
здесь) , чтобы проверить:env.IsEnvironment("Production")
. Не проверяйте с помощьюenv.EnvironmentName == "Production"
!Startup
классы, либо отдельныеConfigure
/ConfigureServices
функции. Если класс или функции соответствуют этим форматам, они будут использоваться вместо стандартных параметров в этой среде.Startup{EnvironmentName}()
(весь класс) || пример:StartupProduction()
Configure{EnvironmentName}()
|| пример:ConfigureProduction()
Configure{EnvironmentName}Services()
|| пример:ConfigureProductionServices()
Полное объяснение
Документы .NET Core описывают, как этого добиться . Используйте переменную окружения,
ASPNETCORE_ENVIRONMENT
которая называется желаемой средой, тогда у вас есть два варианта.Проверьте название среды
Из документов :
ПРИМЕЧАНИЕ: Проверка фактического значения
env.EnvironmentName
является не рекомендуется!Используйте отдельные классы
Из документов :
источник
В
.NET Core 2.0
MVC app /Microsoft.AspNetCore.All
v2.0.0 у вас может быть класс запуска, специфичный для среды, как описано @vaindil, но мне не нравится такой подход.Вы также можете ввести
IHostingEnvironment
вStartUp
конструктор. Вам не нужно хранить переменную среды вProgram
классе.источник
Это может быть выполнено без каких-либо дополнительных свойств или параметров метода, например:
источник
Если вам нужно проверить это где-то в вашей кодовой базе, у которой нет простого доступа к IHostingEnvironment, другой простой способ сделать это так:
источник
согласно документам
Вы можете сделать что-то вроде этого ...
источник
Я хотел получить окружающую среду в одном из моих сервисов. Это действительно легко сделать! Я просто вставляю это в конструктор так:
Теперь позже в коде я могу сделать это:
РЕДАКТИРОВАТЬ:
Код выше для .NET Core 2. Для версии 3 вы захотите использовать
IWebHostEnvironment
.источник
Среда размещения происходит из переменной среды ASPNET_ENV, которая доступна во время запуска с использованием метода расширения IHostingEnvironment.IsEnvironment или одного из соответствующих вспомогательных методов IsDevelopment или IsProduction. Сохраните то, что вам нужно, в Startup () или в вызове ConfigureServices:
источник
IHostingEnvironment
недоступно вConfigureServices
.На всякий случай, если кто-то тоже смотрит на это. В .net core 3+ большая часть этого устарела. Способ обновления:
источник
В Dotnet Core 2.0 Startup-конструктор ожидает только IConfiguration-параметр.
Как читать там хостинг? Я сохраняю его в классе Program во время ConfigureAppConfiguration (используйте полный BuildWebHost вместо WebHost.CreateDefaultBuilder):
Затем Ant читает его в ConfigureServices следующим образом:
источник