亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MEF2 和 Caliburn.Micro - IWindowManager

MEF2 和 Caliburn.Micro - IWindowManager

C#
慕尼黑8549860 2022-11-21 16:27:38
我無法讓 MEF2 將 WindowManager 或 EventAggregator 導入我的 ShellViewModel。我自己的所有課程似乎都運行良好。我已經將我的項目設置為使用 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 來配置導入和導出。當它嘗試使用 _eventAggregator 時,我在 ShellViewModel 的 OnActivate 覆蓋中得到一個 NullReferenceException。從未進行過進口。如果我通過注釋掉 OnActivate() 和 OnDeactivate() 來運行它,它會啟動并顯示一個空白窗口,因此它會正確加載 shell。它只是沒有導入任何依賴項。這是最簡單的 Bootstrapper 和 ViewModel 來顯示問題。引導程序.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>();        }
查看完整描述

1 回答

?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

我想通了。出于某種原因,我必須使用:

ForType<ConcreteType>.ImportProperty<Interface>(x => x.PublicPropertyToSetInterface);

注冊進口時。這使我的簡單示例起作用,從而回答了我的問題。我的實際項目仍然存在

System.InvalidCastException: 'Unable to cast object of type 'System.Lazy`1[System.Object]' to type 'Caliburn.Micro.IWindowManager'.'

錯誤,但這可能是我在注冊時遺漏或歪曲的內容。


查看完整回答
反對 回復 2022-11-21
  • 1 回答
  • 0 關注
  • 135 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號