我目前正在嘗試使用 Unity 將 ViewModel 注入我的 WPF 應(yīng)用程序。我傾向于使用一個(gè)ViewModelLocator類(lèi)將所有 ViewModel 存儲(chǔ)在一個(gè)區(qū)域中,以便在它們之間快速導(dǎo)航我已將我的應(yīng)用程序分成四個(gè)項(xiàng)目:KeystonePP.Models- 持有我的 EF 模型KeystonePP.Startup- 主要啟動(dòng)邏輯KeystonePP.ViewModels- ViewModel 及其接口KeystonePP.Views- 意見(jiàn)我IViewModelLocator在一個(gè)單獨(dú)的項(xiàng)目中有一個(gè)接口:KeystonePP.ViewModelspublic interface IViewModelLocator{ // No code here. Just a contract}這是由我的ViewModelLocator班級(jí)實(shí)施的public class ViewModelLocator : ObservableObject, IViewModelLocator{ // Lots of code here}在我的KeystonePP.Startup項(xiàng)目中,我調(diào)整了我的MainWindow.xaml.cs構(gòu)造函數(shù):public partial class MainWindow : Window{ public MainWindow (IViewModelLocator viewModelLocator) { InitializeComponent(); DataContext = viewModelLocator; }}但是,當(dāng)我在 中嘗試以下代碼時(shí)App.xaml.cs,收到錯(cuò)誤警告: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>(); }}我收到以下錯(cuò)誤:類(lèi)型“KeystonePP.Startup.MainWindow”不能用作泛型類(lèi)型或方法“UnityContainerExtensions.RegisterType(IUnityContainer, params InjectionMember[])”中的類(lèi)型參數(shù)“TTo”。沒(méi)有從“KeystonePP.Startup.MainWindow”到“KeystonePP.ViewModels.Utility.Interfaces.IViewModelLocator”的隱式引用轉(zhuǎn)換。我是不是太復(fù)雜了,還是我錯(cuò)過(guò)了一些簡(jiǎn)單的 Unity 設(shè)置?
1 回答
慕的地8271018
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
你想用它們的實(shí)現(xiàn)注冊(cè)抽象。
IUnityContainer container = new UnityContainer();
container.RegisterType<IViewModelLocator, ViewModelLocator>();
container.RegisterType<MainWindow>();
這樣當(dāng)你打電話(huà)解決MainWindow
var mainWindow = container.Resolve<MainWindow>();
mainWindow.Show();
容器將知道如何在解析時(shí)基于抽象注入實(shí)現(xiàn)。
- 1 回答
- 0 關(guān)注
- 249 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
