gpt4 book ai didi

c# - 当 ViewModel 使用构造函数注入(inject)时,如何在设计时使用 MVVM light 提供虚拟数据?

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:21 25 4
gpt4 key购买 nike

昨天我遇到了一个奇怪的问题。我昨天使用 ninject 作为其 di 容器构建了一个临时的 View 模型定位器样式系统。然后我尝试让它解析数据存储库接口(interface)的最小起订量模拟实现,以通过构造函数注入(inject)将其馈入 View 模型。但是,我在设计时不断收到最小起订量的以下异常。

Error   2   Unable to cast object of type 'Castle.Proxies.IADEmployeeRepoProxy_1' to type 'MVVMSupport.TestHarness.Data.IADEmployeeRepo'.   D:\Users\kicksagnome\Desktop\MVVMSupport\MVVMSupport.TestHarness\App.xaml   16  13  MVVMSupport.TestHarness

Mock<IADEmployeeRepo> repo = new Mock<IADEmployeeRepo>();
repo.Setup<List<ADEmployee>>(r => r.GetAllEmployees())
.Returns(new List<ADEmployee>() { new ADEmployee() { FirstName = "Ryan Butcher" } });

Bind<IADEmployeeRepo>().ToConstant(repo.Object); //Also tried Bind<IADEmployee>().ToMethod(context => repo.Object);

它在设计器的第一次加载时运行良好,但每次更改设计数据和我重建解决方案时都会失败。

我知道这不是最小起订量的用途,所以问题是……
1.) 有办法解决这个问题吗?
2) 我应该如何添加设计时数据?

最佳答案

好吧,您有多种选择。根据“IsInDesignMode”,您可以在 View 模型中有不同的选项,并将您的设计数据驻留在其中。那将是您快速而肮脏的选择。

更好的选择是拥有一个数据服务和一个模拟服务(或设计数据服务),在您的 ViewModelLocator 中,您将在“IsInDesignMode”中使用它。

从那里,只需将您需要模拟的任何内容添加到 DataService 的接口(interface),该服务将在构造时注入(inject)到您的 View 模型中,然后您可以简单地拥有类似的东西:

MyData = DataService.GetData();

在真实数据服务中,您将获取您的数据,而在设计/模拟服务中,您可以根据自己的喜好伪造数据,轻松显示您的设计数据。

如果您有任何其他问题,或者需要更多示例代码,请告诉我。

关于c# - 当 ViewModel 使用构造函数注入(inject)时,如何在设计时使用 MVVM light 提供虚拟数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18895208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com