我目前正在嘗試使用 Unity 將 ViewModel 注入我的 WPF 應用程序。我傾向于使用一個ViewModelLocator類將所有 ViewModel 存儲在一個區域中,以便在它們之間快速導航我已將我的應用程序分成四個項目:KeystonePP.Models- 持有我的 EF 模型KeystonePP.Startup- 主要啟動邏輯KeystonePP.ViewModels- ViewModel 及其接口KeystonePP.Views- 意見我IViewModelLocator在一個單獨的項目中有一個接口:KeystonePP.ViewModelspublic 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”不能用作泛型類型或方法“UnityContainerExtensions.RegisterType(IUnityContainer, params InjectionMember[])”中的類型參數“TTo”。沒有從“KeystonePP.Startup.MainWindow”到“KeystonePP.ViewModels.Utility.Interfaces.IViewModelLocator”的隱式引用轉換。我是不是太復雜了,還是我錯過了一些簡單的 Unity 設置?
1 回答

慕的地8271018
TA貢獻1796條經驗 獲得超4個贊
你想用它們的實現注冊抽象。
IUnityContainer container = new UnityContainer();
container.RegisterType<IViewModelLocator, ViewModelLocator>();
container.RegisterType<MainWindow>();
這樣當你打電話解決MainWindow
var mainWindow = container.Resolve<MainWindow>();
mainWindow.Show();
容器將知道如何在解析時基于抽象注入實現。
- 1 回答
- 0 關注
- 188 瀏覽
添加回答
舉報
0/150
提交
取消