我是使用 Prism(使用 v8)和 WPF 應用程式的新手。我創建了一個模塊程式集并將其注冊到應用程式:
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
base.ConfigureModuleCatalog(moduleCatalog);
moduleCatalog.AddModule<ApplicationModule>();
}
該模塊注冊了 MyApplication 的單例實體。
public class ApplicationModule : IModule
{
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSingleton<IMyApplication, MyApplication>();
}
public void OnInitialized(IContainerProvider containerProvider)
{
}
}
ShellView 自動連接到 ShellViewModel。
public class ShellViewModel : BindableBase
{
private readonly IDialogService? _dialogService;
public ShellViewModel(IDialogService dialogService)
{
NewCommand = new DelegateCommand(NewExecute);
_dialogService = dialogService;
}
public DelegateCommand NewCommand { get; private set; }
private void NewExecute()
{
_dialogService?.Present("sample message", "sample caption");
}
}
現在這一切都按原樣作業,但是如果我將對 IMyApplication 的參考放入 ShellViewModel 建構式中以便我可以參考它,那么整個事情就會崩潰,因為它還不存在并且無法注入。
所以我在 AddModule 呼叫和 ShellViewModel 建構式上放置了一個斷點,并且在呼叫 RegisterSingleton 之前呼叫了該建構式,所以我猜我做錯了什么。
我哪里出錯了?
uj5u.com熱心網友回復:
我哪里出錯了?
你做對了。您發現了 Prism 中模塊系統的一個限制:shell 的視圖模型不能依賴于模塊中注冊的任何內容。
雖然一開始這看起來很煩人,但它使您能夠在后臺加載模塊時顯示 shell。在大多數情況下,您可以通過注入來解決它,Lazy<IServiceFromModule>而ShellViewModel不是IServiceFromModule- 在您實際使用它之前不會解決它。只要在模塊初始化后使用它就可以了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/479905.html
