Как выполнить инъекцию в команду (WPF)?
Есть команда, находящаяся в другом проекте в виде класса, унаследованная и реализующая интерфейс ICommand.
Эта команда выполняет некоторую логику по использованию сервиса, который открывает OpenFileDialogue и выполняет импорт некоторых данных в репозиторий.
Проблема заключается в следующем: команда вызывается из кнопки, и хоть выполняется отлично - использовать конструктор с параметрами я не могу, а при запуске я падаю на этапе компиляции с ошибкой о том, что невозможно найти нужный конструктор (иногда еще Object reference not set to an instance of an object). При этом DI прекрасно работает с вьюмоделями - в своем UserControl я просто указываю DataContext, а нужные сервисы сами подтягиваются из контейнера.
Сервисы, которые используются в команде, очевидно, я зарегистрировал, но они не работают.
Класс команды:
public class ImportLocalCommand : CommandBase
{
private IFileImportService _importService;
public ImportLocalCommand(IFileImportService importService)
{
_importService = importService;
}
public override bool CanExecute(object? parameter)
=> true;
public override void Execute(object? parameter)
=> _importService.ExecuteImport();
}
Регистрация сервисов:
public App()
{
_host = Host.CreateDefaultBuilder()
.ConfigureServices(services =>
{
services.AddSingleton<MainWindow>()
.AddSingleton<ApplicationViewModel>()
.AddSingleton<ImportLocalCommand>()
.AddSingleton<IFileImportService, FileImportService>()
.AddSingleton<ISongViewModel, SongViewModel>()
.AddSingleton<IObservableRepository<Song>, SongRepository>();
})
.Build();
}
Строки подключения дата контекста и команды:
d:DataContext="{d:DesignInstance Type=vm:SongViewModel}"
xmlns:comm="clr-namespace:NorthSound.Infrastructure.Commands;assembly=NorthSound.Infrastructure"