我有一个相当简单和标准的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