Я разрабатываю приложение WPF, используя Prism 7.2.У меня есть модуль, который реализует интерфейс IModule
, где я регистрирую представления и модели представления в методе RegisterTypes
, например:
containerRegistry.Register<IPanelOptimizationViewModel, PanelOptimizationViewModel>();
Проблема возникает, когда я пытаюсь разрешить реализацию:
var vm = containerProvider.Resolve<IPanelOptimizationViewModel>();
, после чего я получаю следующее Unity.ResolutionFailedException : 'Не удалось разрешить ошибку: нет общедоступного конструктора для типа XXX.Infrastructure.Interfaces.IView.'
Класс PanelOptimizationViewModel
является производным от базового класса:
public class PanelOptimizationViewModel : ViewModelBase, IPanelOptimizationViewModel
{
public PanelOptimizationViewModel(IPanelOptimizationView view, IPanelOptimizationInputViewModel inpVM) : base(view)
}
, а ViewModelBase
выглядит следующим образом:
public class ViewModelBase : BindableBase, IViewModel
{
public IView View { get; set; }
public ViewModelBase(IView view)
{
View = view;
View.ViewModel = this;
}
}
Определены интерфейсы IView
и IViewModel
в общем инфраструктурном проекте.Они не зарегистрированы нигде в контейнере, но если я удаляю параметр IPanelOptimizationInputViewModel
, исключение времени выполнения не выдается, что наводит меня на мысль, что мне тоже не нужно это делать.
НасколькоЯ был в состоянии понять, Unity.Container
будет использовать конструктор "наиболее параметризованный" (см. Unity не использует конструктор по умолчанию класса ), но я не могу предоставить параметр в методе Register, чтобы указатьэто, как можно было раньше (контейнерная абстракция до Prism 7), с помощью метода RegisterType.
Как решить эту проблему?Есть ли перегрузка метода Prism.Ioc.IContainerRegistry.Register, который позволяет мне настроить регистрацию для внедрения конструктора?
Должен ли я работать напрямую с контейнером Unity?
По сути, яя пытаюсь внедрить модель представления дочернего представления в конструктор моей "основной" модели представления, но это не работает, если в базовом классе вызывается неправильный конструктор с неправильным набором параметров ... (если эточто происходит).
Излишне говорить, что все дочерние представления и модели представления были зарегистрированы в методе RegisterTypes в модуле.
Любая помощь по этому вопросу будет принята с благодарностью