我無法讓 MEF2 將 WindowManager 或 EventAggregator 導(dǎo)入我的 ShellViewModel。我自己的所有課程似乎都運行良好。我已經(jīng)將我的項目設(shè)置為使用 MEF2(System.ComponentModel.Composition 和子項)。我按照Customizing The Bootstrapper文檔以及 Tim Corey 的From Zero to Proficient with MEF開始,并意識到這些是 MEF1。我閱讀了MEF 2 Preview Beginners Guide和Managed Extensibility Framework Improvements in .NET 4.5,將 CompositionBatch 替換為 RegistrationBuilder,并刪除了建議的類和屬性屬性,以支持 RegistrationBuilder 的 Fluid API 來配置導(dǎo)入和導(dǎo)出。當(dāng)它嘗試使用 _eventAggregator 時,我在 ShellViewModel 的 OnActivate 覆蓋中得到一個 NullReferenceException。從未進(jìn)行過進(jìn)口。如果我通過注釋掉 OnActivate() 和 OnDeactivate() 來運行它,它會啟動并顯示一個空白窗口,因此它會正確加載 shell。它只是沒有導(dǎo)入任何依賴項。這是最簡單的 Bootstrapper 和 ViewModel 來顯示問題。引導(dǎo)程序.cs:using System;using System.Collections.Generic;using System.Linq;using System.Windows;using Caliburn.Micro;using System.ComponentModel.Composition;using System.ComponentModel.Composition.Hosting;using System.ComponentModel.Composition.Registration;using System.Reflection;using MEF2Test.ViewModels;namespace MEF2Test{ public class MefBootstrapper : BootstrapperBase { private CompositionContainer _container; public MefBootstrapper() { Initialize(); } protected override void Configure() { RegistrationBuilder cmBuilder = new RegistrationBuilder(); RegistrationBuilder cmpBuilder = new RegistrationBuilder(); RegistrationBuilder vmBuilder = new RegistrationBuilder(); cmBuilder.ForTypesDerivedFrom<IEventAggregator>().Export<IEventAggregator>(); cmpBuilder.ForTypesDerivedFrom<IWindowManager>().Export<IWindowManager>(); vmBuilder.ForTypesDerivedFrom<IShell>().Export<IShell>(); }
MEF2 和 Caliburn.Micro - IWindowManager
慕尼黑8549860
2022-11-21 16:27:38