Я просмотрел документацию по настройке ядра ASP.NET. В документации говорится, что вы можете получить доступ к конфигурации из любого места в приложении.
Ниже представлен Startup.cs, созданный по шаблону
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsEnvironment("Development"))
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseMvc();
}
}
Итак, когда Startup.cs
мы настраиваем все параметры, Startup.cs также имеет свойство с именемConfiguration
Что я не могу понять, как получить доступ к этой конфигурации в контроллере или где-либо в приложении? MS рекомендует использовать шаблон параметров, но у меня всего 4-5 пар ключ-значение, поэтому я бы не хотел использовать шаблон параметров. Я просто хотел получить доступ к конфигурации в приложении. Как мне вводить его в любом классе?
Ответы:
Обновить
Использование ASP.NET Core 2.0 автоматически добавит
IConfiguration
экземпляр вашего приложения в контейнер внедрения зависимостей. Это также работает в сочетании сConfigureAppConfiguration
наWebHostBuilder
.Например:
Это так же просто, как добавить
IConfiguration
экземпляр в коллекцию сервисов как одноэлементный объектConfigureServices
:Где
Configuration
экземпляр в вашемStartup
классе.Это позволяет вам вводить
IConfiguration
в любой контроллер или службу:источник
IConfiguration
такое движение очень неплотно. Намного лучше использовать паттерн Параметры .В .NET Core вы можете ввести
IConfiguration
как параметр в свой конструктор класса, и он будет доступен.Теперь, когда вы хотите создать экземпляр своего класса, поскольку ваш класс вводит
IConfiguration
, вы не сможете просто сделатьnew MyClass()
, потому что ему нуженIConfiguration
параметр, введенный в конструктор, поэтому вам нужно будет ввести свой класс как хорошо для инъекционной цепочки, что означает два простых шага:1) Добавьте свой Class / es - где вы хотите использовать
IConfiguration
, к методуIServiceCollection
atConfigureServices()
вStartup.cs
2) Определите экземпляр - скажем, в
Controller
, и введите его с помощью конструктора:Теперь у вас должна быть возможность
_myClass.configuration
свободно наслаждаться ...Если вы все еще ищете способ сделать его доступным без внедрения классов в контроллер, вы можете сохранить его в a
static class
, который вы настроите вStartup.cs
, например:И ваш
Startup
конструктор должен выглядеть так:Затем используйте
MyAppData.Configuration
где угодно в вашей программе.Не спорите со мной, почему первый вариант является правильным, я просто вижу, что опытные разработчики всегда избегают мусора на своем пути, и хорошо понимают, что постоянно держать в памяти множество данных - не лучшая практика, это плохо ни для производительности, ни для разработки, и, возможно, также более безопасно иметь с собой только то, что вам нужно.
источник
System.Configuration
вернулась к CORE. Теперь вы можете получить доступ к своему старому доброму app.configs, как в старые добрые времена. И я не говорю здесь о контроллерах. Мы говорим о компонентах, у которых есть собственные конфигурацииЯ знаю, что это старый, но, учитывая шаблоны IOptions, относительно просто реализовать:
Класс с общедоступными свойствами получения / установки, которые соответствуют настройкам в конфигурации
зарегистрируйте свои настройки
вводить через IOptions
Не знаю, почему бы тебе просто не сделать это.
источник
Microsoft.Extensions.Configuration
,Microsoft.Extensions.Configuration.Binder
аMicrosoft.Extensions.Configuration.Json
затем вы загрузитеappsettings.json
файл, например .., аvar config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
также вы должны убедиться, что дляappsettings.json
копии в выходной каталог установлено значениеcopy always
Сейчас делаю вот так:
Затем я использую это там, где мне нужно получить данные из файла appsettings.json:
источник
Также есть возможность сделать
configuration
static в startup.cs, чтобы вы могли легко получить к нему доступ из любого места, статические переменные удобны, да!Это делает конфигурацию доступной где угодно с помощью
Startup.Configuration.GetSection...
Что может пойти не так?источник
Я просмотрел образец шаблона опций и увидел следующее:
При добавлении Iconfiguration в конструктор моего класса я мог получить доступ к параметрам конфигурации через DI.
Пример:
источник
Я знаю, что для этого может быть несколько способов, я использую Core 3.1 и искал оптимальный / более чистый вариант, и в итоге я сделал это:
источник
В 8-2017 Microsoft выпустила
System.Configuration
для .NET CORE v4.4. В настоящее время предварительная версия v4.5 и v4.6.Для тех из нас, кто работает над преобразованием .Net Framework в CORE, это важно. Это позволяет хранить и использовать текущие
app.config
файлы, к которым можно получить доступ из любой сборки. Возможно, это даже может быть альтернативойappsettings.json
, поскольку Microsoft осознала необходимость в этом. В FW работает так же, как и раньше. Есть одно отличие:В веб-приложениях [например, ASP.NET CORE WEB API] вам необходимо использовать,
app.config
а не web.config для вашегоappSettings
илиconfigurationSection
. Возможно, вам придется использовать,web.config
но только если вы развертываете свой сайт через IIS. Вы помещаете специфичные для IIS настройки вweb.config
Я тестировал его с помощью netstandard20 DLL и Asp.net Core Web Api, и все работает.
источник
Использование шаблона параметров в ASP.NET Core - лучший вариант . Я просто хочу добавить, что если вам нужно получить доступ к параметрам в вашем startup.cs , я рекомендую сделать это следующим образом:
CosmosDbOptions.cs:
Startup.cs:
источник
Мне нужно при запуске читать собственные параметры.
Это должно быть до того, как WebHost будет запущен (поскольку мне нужен URL-адрес / IP-адрес «для прослушивания» и порт из файла параметров и применить его к WebHost). Кроме того, мне нужны общедоступные настройки во всем приложении.
После некоторого поиска (полного примера не найдено, только фрагменты) и после различных попыток и ошибок я решил сделать это «по-старому» с собственным файлом .ini.
Итак ... если вы хотите использовать свой собственный .ini файл и / или установите "для прослушивания url / IP" ваш собственный и / или вам нужны общедоступные настройки, это для вас ...
Полный пример, действительный для ядра 2.1 (mvc):
Создайте .ini-файл - пример:
при этом Dummyx включены только в качестве примера для других типов даты, кроме строки (а также для проверки случая «неправильный параметр» (см. код ниже).
Добавлен файл кода в корень проекта для хранения глобальных переменных:
Изменил код в program.cs (до CreateWebHostBuilder ()):
Сюда:
Если, например, установлен неправильный тип (например, * Dummy1 = gew7623 активирован вместо Dummy1 = true), хост показывает красный информация на консоли (включая исключение), и я могу реагировать также в приложении (GV.bFehler_Ini имеет значение true, если есть ошибки с .ini)
источник