Глобалы и статики плохие. ASP.NET Core включает встроенный DI специально, чтобы избежать этого, так что не ходите и не вводите их заново. Правильный подход заключается в использовании конфигурации. Стандартно приложение ASP.NET Core поддерживает настройку через JSON (appsettings.json
и appsettings.{environment}.json
), командную строку, пользовательские секреты (также JSON, но хранящиеся в вашем профиле, а не в проекте) и среду. переменные. Если вам нужны другие источники конфигурации, есть другие доступные провайдеры, или вы можете даже свернуть свой собственный, чтобы использовать все, что вам нравится.
Какой бы источник конфигурации вы ни использовали, конечным результатом будут все параметры конфигурации из всех источников, входящих в IConfigurationRoot
. Хотя вы можете технически использовать это напрямую, лучше использовать строго типизированную конфигурацию, предоставляемую IOptions<T>
и аналогичными. Просто вы создаете класс, который представляет некоторый раздел в вашей конфигурации:
public class FooConfig
{
public string Bar { get; set; }
}
Что будет соответствовать чему-то вроде { Foo: { Bar: "Baz" } }
в JSON, например. Затем в ConfigureServices
в Startup.cs
:
services.Configure<FooConfig>(Configuration.GetSection("Foo"));
Наконец, в вашем контроллере, например:
public class FooController : Controller
{
private IOptions<FooConfig> _config;
public FooController(IOptions<FooConfig> config)
{
_config = config ?? throw new ArgumentNullException(nameof(config));
}
...
}
Конфигурация читается при запуске и впоследствии технически сохраняется в памяти, поэтому ваша жалоба на необходимость использовать что-то вроде JSON по большей части не имеет смысла. Однако, если вы действительно хотите полностью в памяти, есть поставщик конфигурации памяти . Тем не менее, всегда лучше, если вы можете экстернализировать вашу конфигурацию.