Как внедрить службы DI в модель представления WPF?

#c# #wpf #.net-core

Вопрос:

Я реализую контейнер DI в приложении .NET Core WPF.

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

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

 public partial class App : Application
    {
        private readonly ServiceProvider _serviceProvider;
        private IConfiguration _configuration { get; set; }

        public App()
        {
            InitializeConfiguration();

            var serviceCollection = new ServiceCollection();
            ConfigureServices(serviceCollection);
            _serviceProvider = serviceCollection.BuildServiceProvider();
        }

        private void InitializeConfiguration()
        {
            var builder = new ConfigurationBuilder()
                             .SetBasePath(Directory.GetCurrentDirectory())
                             .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

            _configuration = builder.Build();
        }

        private void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<IConfiguration>(s => _configuration);
            services.AddTransient<IRepository, Repository>();
            services.AddTransient<IDeliveryService, DeliveryService>();

            services.AddSingleton<MainWindow>();
        }

        private void OnStartup(object sender, StartupEventArgs e)
        {
            var mainWindow = _serviceProvider.GetService<MainWindow>();
            mainWindow.Show();
        }
    }
 

Большое спасибо!

Комментарии:

1. Какие модели просмотра?

2. @Nkosi Я пытаюсь следовать шаблону MVVM, поэтому я структурировал страницы по папкам Представлений, моделей представлений и моделей. На данный момент это не так важно, поскольку моя единственная цель-найти способ ввода данных в класс.

3. Пусть представление явно зависит от модели представления с помощью инъекции конструктора, зарегистрируйте модель представления с контейнером, и модель представления будет введена в представление при его разрешении.

4. @Nkosi В главном окне я хочу создать экземпляр 2 или более страниц с соответствующими зависимостями (щелкните пункт бокового меню). Как мне получить контейнер зависимостей, чтобы устранить эту зависимость? у вас есть фрагмент кода на этот счет? Не могли бы вы, пожалуйста, написать ответ? Спасибо!

5. Плюс детали в вашем последнем комментарии должны были быть в оригинальном посте, чтобы помочь другим понять, чего вы пытаетесь достичь.