可以說我有一個組件,其中有許多較小的組件,它們會在第一個組件被初始化之前檢查先決條件。他們不相互依賴,所以我不關心訂單,並希望他們同時運行。我正在使用MEF和Caliburn.Micro進行演示。使用MEF和Caliburn Micro管理先決條件
我想過這個設置:
class Big
{
[ImportMany]
public IEnumerable<IBigPrerequisite> Prerequisites {get; set;}
public void Initialize(){...}
}
和
interface IBigPrerequisite
{
public bool IsBusy {...}
public bool Allow {...}
public void StartChecking();
}
現在我想用這個來完成是實現IBigPrerequisite
類可以打開一個窗口(例如「文件X未找到 - 這可能會導致錯誤。繼續?「) - 這應該是可能的。
但我只想讓一個窗口一次可見。除了同步之外,我將如何實現?
編輯 - 因爲這個問題似乎太含糊
我需要前Big
將被激活,這些動作具體運行。比方說,我們啓動邏輯開關達到這樣的:
Big big; //we got this through Importing somewhere in composition
var allow = true;
var count = 0;
if(!pre.Any()) //no prerequisites, show window immediately
windowManager.ShowWindow(big)
foreach(var pre in big.Prerequisities)
{
pre.PropertyChanged += (s, args) =>
{
if(args.PropertyName == "IsBusy" && !pre.IsBusy) // if a prerequisite finished it's check
{
allow = allow && pre.Allow; //if one prerequisite says nay we could just return, actually...
count++;
if(count == big.Prerequisites.Count() && allow)
windowManager.ShowWindow(big);
}
}
pre.StartChecking();
}
現在,我明確要實現IBigPrerequisite
類才能夠打開一個窗口,但如果所有的先決條件(無需用戶交互)沒有窗戶應該顯示。我不想爲這裏的每一堂課打開一扇窗戶。
我正在尋找一種方式,比如說,給IBigPrerequisite(這或許應該被稱爲IPrerequisiteViewModel
反正)像bool RequestsWindow {get;}
一個屬性,只有當)的視圖模型請求它和b)沒有其他先決條件窗口中創建視圖在當時是開放的。
注意:此處的代碼僅用於說明,因爲我不確定如何實現此行爲。我對這些框架(和概念)沒有經驗,所以如果這個問題看起來很愚蠢,請耐心等待。
你有什麼嘗試過,沒有工作,你確切的問題是什麼:顯示對話框,同步執行或什麼? –