В настоящее время я пытаюсь использовать Unity для внедрения ViewModels в мое приложение WPF.
Я склонен использовать класс ViewModelLocator
для хранения всех моих моделей ViewMell в одной области, для быстрой навигации между ними
Я разделил свое приложение на четыре проекта:
KeystonePP.Models
- содержит мою модель EF
KeystonePP.Startup
- логика основного запуска
KeystonePP.ViewModels
- ViewModels и их интерфейсы
KeystonePP.Views
- Просмотров
У меня есть IViewModelLocator
интерфейс в отдельном проекте: KeystonePP.ViewModels
public interface IViewModelLocator
{
// No code here. Just a contract
}
Это реализовано моим ViewModelLocator
классом
public class ViewModelLocator : ObservableObject, IViewModelLocator
{
// Lots of code here
}
В моем KeystonePP.Startup
проекте я настроил свой MainWindow.xaml.cs
конструктор так:
public partial class MainWindow : Window
{
public MainWindow (IViewModelLocator viewModelLocator)
{
InitializeComponent();
DataContext = viewModelLocator;
}
}
Однако, когда я пытаюсь выполнить следующий код в App.xaml.cs
, я получаю предупреждение об ошибке:
public partial class App : Application
{
/// <summary>
/// Startup Logic for App
/// </summary>
/// <param name="e"></param>
protected override void OnStartup (StartupEventArgs e)
{
base.OnStartup(e);
IUnityContainer container = new UnityContainer();
container.RegisterType<IViewModelLocator, MainWindow>();
}
}
Я получаю следующую ошибку:
Тип 'KeystonePP.Startup.MainWindow' нельзя использовать в качестве параметра типа 'TTo' в универсальном типе или методе 'UnityContainerExtensions.RegisterType (IUnityContainer, params InjectionMember [])'. Не существует неявного преобразования ссылок из KeystonePP.Startup.MainWindow в KeystonePP.ViewModels.Utility.Interfaces.IViewModelLocator.
Я слишком усложнился или упустил что-то простое, настраивая Unity?