Создайте интерфейс и внедрите с помощью SimpleIoc

Я создал класс AppConfig:

public class AppConfig
{
    private readonly IConfigurationRoot _configurationRoot;

    public AppConfig()
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Package.Current.InstalledLocation.Path)
            .AddJsonFile("appsettings.json", optional: false);

        _configurationRoot = builder.Build();
    }

    private T GetSection<T>(string key) => _configurationRoot.GetSection(key).Get<T>();

    public Config Config => GetSection<Config>(nameof(Config));
}

И я использую это так в своих ViewModels:

var config = new AppConfig();

Но есть ли лучший способ использовать это с внедрением зависимостей.

Чтобы я мог добавить его в ViewModelLocator, как и другие службы?

public ViewModelLocator()
{
    SimpleIoc.Default.Register<ITestService, TestService>();

    SimpleIoc.Default.Register<MainViewModel>();
}

Или как бы вы сделали это в приложении UWP с MvvmLightLibsStd10?

Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создайте интерфейс, который абстрагирует желаемый класс.

public interface IAppConfig {
    Config Config { get; }
}

Получить класс из интерфейса

public class AppConfig : IAppConfig {
    //...omitted for brevity
}

и зарегистрируйте абстракцию и реализацию в контейнере

//...

SimpleIoc.Default.Register<IAppConfig, AppConfig>();

//...

Таким образом, любой класс, который требует использования конфигурации, может явно зависеть от него через внедрение конструктора.

Эй, действительно, работает идеально. Просто, но я всегда усложняю задачу. Большое спасибо.

user7849697 20.12.2020 15:40

Другие вопросы по теме