0

В своем проекте я использую :

  1. Microsoft.Extensions.DependencyInjection;
  2. CommunityToolkit.Mvvm;

При старте приложения в App.xaml.cs:

public partial class App : Application
{
    private ServiceProvider serviceProvider;
protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    var serviceCollection = new ServiceCollection();
    ConfigureServices(serviceCollection);

    serviceProvider = serviceCollection.BuildServiceProvider();

    var authViewModel = serviceProvider.GetRequiredService<AuthViewModel>();
    var authWindow = new AuthWindow { DataContext = authViewModel };
    authWindow.Show();
}

private void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<INavigationService, NavigationService>();
    services.AddSingleton<IDialogService, DialogService>();
    services.AddSingleton<ExaminationWindow>();
    services.AddTransient<ExaminationViewModel>();
    services.AddTransient<TimetableViewModel>();
    services.AddSingleton<TimetableUserControl>();
    services.AddTransient<MainViewModel>();
    services.AddTransient<AuthViewModel>();
    services.AddSingleton<MainWindow>();
    services.AddSingleton<AuthWindow>();
}

}

Конструктор AuthViewModel:

public AuthViewModel(INavigationService navigationService)
{
    _navigationService = navigationService;
}

AuthWindow.xaml.cs:

    public AuthWindow()
    {
        InitializeComponent();
    }

И все запускается нормально, так же у меня UserControl в котором представлено расписание, который находится в MainWindow, MainWindow через сервис открывается после успешного входа в AuthWindow. NavigationService:

public NavigationService(IServiceProvider serviceProvider)
{
    _serviceProvider = serviceProvider;
}
public void ShowMainWindow()
{
    var timetableViewModel = _serviceProvider.GetRequiredService<TimetableViewModel>();
    var timetableUserControl = new TimetableUserControl { DataContext = timetableViewModel };
    var mainWindow = _serviceProvider.GetRequiredService<MainWindow>();
    mainWindow.table = timetableUserControl;
    mainWindow.Show();
}

Конструктор TimetableViewModel:

public TimetableViewModel(IDialogService dialogService)
{
    _dialogService = dialogService;
    FullSchedule = new ObservableCollection<Timetable>(Timetable.SetTimetable(GlobalState.Instance.CurrentUser.Id));
    Test = "12345";
}

TimetableUserControl:

public TimetableUserControl()
{
    InitializeComponent();
}

Но этот код выдает ошибку после входа и выдает что InitializeComponent(); System.NullReferenceException: "Object reference not set to an instance of an object." Пытался решить различными способами, дошел до такого вида программы, как я думал это решит проблему, но нет. В чем заключается проблема и как ее можно исправить?

  • 1
  • Не согласен, что мой вопрос дубликат. В своем вопросе я спрашиваю про ошибку в контексте, которого не было в том вопросе, который Вы указали, следовательно ответа на мой вопрос там нет – tr3shk0 Dec 04 '23 at 09:43
  • 1
    Ошибку целиком прикладывайте, и XAML. Метод InitializeComponent отвечает за инициализацию XAML, его чтение, создание всех контролов. Если у вас ошибка именно на нем, то значит проблема в XAML. – EvgeniyZ Dec 04 '23 at 12:34

0 Answers0