我正在開發Windows Phone 7應用程序並使用MVVM模式。我需要傳遞一個參數給頁面的ViewModel的構造器。我所有的數據上下文和綁定都是在XAML中完成的。通過我的研究,我已經看到,我需要使用依賴注入器(如NInject)來做到這一點。NInject:將參數發送到ViewModel類構造函數
下面是關於發生了什麼的一點細節: 我有一個頁面ListPicker列出各種任務。每個任務都有一個唯一的TaskID。當選擇一個項目時,我需要打開另一個頁面來顯示選定的任務細節。我ViewModel和綁定全部完成,如果我在ViewModel中使用靜態TaskID,但當然我需要使用一個變量。
我設置NInject項目,需要如ViewModelLocator和我NInjectModule各種類別如下所示:
public class LighthouseNInjectModule : NinjectModule
{
public override void Load()
{
this.Bind<TaskViewModel>().ToSelf().WithConstructorArgument("TaskID", 2690);
}
}
請注意,我這裏有一個硬編碼和的TaskID使用此代碼這個價值得到正確注入到我的構造函數中。當然,這是硬編碼的,我需要爲選定的ListPicker項目獲取TaskID。我知道如何從ListPicker中獲取選定的ID,但是如何讓NInject知道它,所以當我的類構造函數運行時它將具有正確的值?
這是我的ViewModel類的基本定義,顯示了使用Injector屬性。
public class TaskViewModel : INotifyPropertyChanged
{
[Inject]
public TaskViewModel(int TaskID)
{
//run function to get data using TaskID
}
}
感謝您的迴應雷莫。我已經在GitHub上爲Ninject做了一切工作,並且在這裏看看如何以及在哪裏實現,但是已經空了。 Ninject的文檔非常薄,我希望有一本好書可以解釋一切。有沒有人有樣品? – Walter
@Waltedbn:你能解釋你正在使用哪個版本?你有困難嗎?雷莫的方法是正確的,並且從記憶中可以看出,超載已經在Ninject很長一段時間了。你沒有看到過載?你在看什麼?除非您能詳細說明您的確切問題,否則我們不能再多談談。重新推薦.NET書中的依賴注入,儘管它不包含Ninject。如果你閱讀了這個和Ninject的wiki,你會得到足夠的信息。 (並不是說維基是完美的 - 它取決於你需要的介紹材料/ ninject細節的混合以及它遠非完美) –
感謝這本書的推薦。 Theres在8月底推出了一個新版本,我已經下了訂單。至於我目前的問題,我看到以「string name,Func callback」作爲參數的重載。 我遇到問題的地方是回調參數。我假設需要在viewModel中具有需要發送到第二個viewModel的ctor的值的函數。 –
Walter