我有一個相當簡單和標準的MVVM WPF應用程序。我使用TinyIoC作爲包含器,爲ViewModels提供底層數據和緩存提供程序。我正在使用TinyIoC,因爲我想與MonoTouch和Monodroid項目共享此代碼。WPF設計器加載失敗使用IoC
ViewModel的每個用戶控件都不依賴於從TinyIoC解析數據提供者時添加到MainWindow的XAML時工作正常。
是誰的ViewModels是否正在使用TinyIoC來解決所使用的數據提供用戶控制得到他們的數據,不能在設計視圖時添加到主窗口被實例化。
重要注意事項:當我運行應用程序時,一切正常,只是設計師被破壞 - 一個很大的障礙。
以下是基本代碼:
// From App.xaml.cs
private void HandleAppStartupEvent(object sender, StartupEventArgs e) {
IDataStoreProvider store = new XmlDataStoreProvider();
ICacheProvider cache = new DictionaryCacheProvider();
TinyIoCContainer.Current.Register(store);
TinyIoCContainer.Current.Register(cache);
}
查看/視圖模型/ XAML約束力的標準執行 - 這裏沒有任何的問題。
在數據層的深處,IoC容器用於解析使用哪個提供者 - 在上面的代碼中設置的提供者。
public static class Gateway
{
private static IDataStoreProvider store;
private static ICacheProvider cache;
static Gateway() {
store = TinyIoCContainer.Current.Resolve<IDataStoreProvider>();
cache = TinyIoCContainer.Current.Resolve<ICacheProvider>();
}
// use the store and cache here...
}
這是我從設計師那裏得到的確切的錯誤。
無法解析類型:在TinyIoC.TinyIoCContainer.ResolveInternal(TypeRegistration註冊,NamedParameterOverloads參數,ResolveOptions選項)用C Sample.Core.Data.IDataStoreProvider :_dev \ SAMPLE \ SampleSolution \ Sample.Core \實用\ TinyIoC.cs:line 3281 at TinyIoC.TinyIoCContainer.Resolve(Type resolveType)in C:_dev \ Sample \ SampleSolution \ Sample.Core \ Utility \ TinyIoC.cs:line 1314 at TinyIoC.TinyIoCContainer.ResolveResolveType in C:_dev \ Sample \ SampleSolution \ Sample.Core \ Utility \ TinyIoC.cs:line 1433 at Sample.Core.Data.Gateway..cctor()in C:_dev \ Sample \ SampleSolution \ Sample.Core \ Data \ Gateway.cs:line 14
我想我明白爲什麼我得到這個錯誤 - 應用程序啓動事件不激發設計師加載之前加載國際奧委會和執行主窗口中用戶控件。
同樣重要的是要注意,應用程序工作正常 - 國際奧委會和一切。我想停下來無論是設計師加載錯誤(按優先順序排列):
- 瞭解如何修改代碼以正確地與設計師
- 存根與模擬數據的現有控制數據工作設計師
- 禁用此設計者特徵
您是否嘗試過使用MVVM架構? – 2012-07-13 22:03:30
是的 - 這是MVVM – IUnknown 2012-07-13 22:07:11