@tr3shk0

Почему InitializeComponent(); выдает System.NullReferenceException: «Object reference not set to an instance of an object.»?

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

Microsoft.Extensions.DependencyInjection;
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." Пытался решить различными способами, дошел до такого вида программы, как я думал это решит проблему, но нет. В чем заключается проблема и как ее можно исправить?
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
Попробуйте точку дебагата поставить на выполнении метода и зайти внутрь самого метода, что бы понять, какой из компонентов является null
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы