Каков рекомендуемый метод загрузки данных один раз для пользователя во всем приложении? - PullRequest
0 голосов
/ 02 июля 2018

Поскольку почти в каждом проекте есть некоторые предустановленные значения настроек, которые должны использоваться во всем приложении, каков рекомендуемый способ их загрузки один раз, а затем повсеместного использования?

Например, я сделал проект, в котором у меня были некоторые настройки, хранящиеся в базе данных, к которым обращались по всему приложению. Вместо того, чтобы запрашивать их каждый раз, я загружал все в статический класс, а затем использовал его во всем приложении. Какой другой подход вы используете?

1 Ответ

0 голосов
/ 02 июля 2018

Если у вас есть класс, который извлекает ваши настройки из базы данных:

public class SqlSettingsProvider : ISettingsProvider
{
    private readonly string _connectionString;

    public SqlSettingsProvider(string connectionString)
    {
        _connectionString = connectionString;
    }

    public Settings GetSettings()
    {
        // load the settings from SQL
    }
}

Вы можете зарегистрировать этот класс с помощью ServiceCollection:

var connectionString = "xyz"; // load this from config;
services.AddSingleton<SqlSettingsProvider>(provider => 
    new SqlSettingsProvider(connectionString));

(у вас может быть интерфейс типа ISettingsProvider, но в этом примере он не нужен, потому что вы собираетесь ввести Settings, а не провайдер настроек.)

Затем настройте свой набор служб для разрешения Settings, разрешив SqlSettingsProvider и используя его для получения экземпляра Settings.

services.AddSingleton<Settings>(provider => 
    provider.GetService<SqlSettingsProvider>().GetSettings());

Теперь, где вам нужно Settings вы просто вводите их:

public class SomeControllerOrOtherClass
{
    private readonly Settings _settings;

    public SomeControllerOrOtherClass(Settings settings)
    {
        _settings = settings;
    }
}

Теперь ваши уроки могут зависеть от Settings, и не важно, откуда они берутся. Коллекция сервисов будет создавать ее только один раз, а затем каждый раз будет возвращать один и тот же экземпляр, а это значит, что из базы данных она будет найдена только один раз.

Внедрение интерфейса, подобного ISettingsProvider, может дать долгосрочную выгоду. Это дает вам немного больше гибкости. Например, вместо сохранения Settings на протяжении всего времени жизни приложения оно может кэшировать их в течение заданного периода времени, или оно может вести себя по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...