gpt4 book ai didi

mvvm-light - 在 MVVM Light 和 SimpleIOC 中使用设计时存储库

转载 作者:行者123 更新时间:2023-12-03 16:28:12 32 4
gpt4 key购买 nike

我已经开始使用最新的 MVVM Light 工具包 v4(NuGet 预览版 v4.1.21,DLL v:4.0.21.25725),它实现了 SimpleIOC 模式。

在我的 ViewModelLocator.cs 中,我有以下内容来处理设计和运行时存储库:

public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IWebRepository, DesignWebRepository>();
}
else
{
SimpleIoc.Default.Register<IWebRepository, WebRepository>();
}

SimpleIoc.Default.Register<MainViewModel>();
}

public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}

但这在设计器中为我提供了以下异常(因此没有编译错误,也没有运行时错误,但我失去了我的 Blendability):
Class Repository.IWebRepository 已经注册
(在第一次调用 .Register() 时)

网络资源库:

public interface IWebRepository
{
string Test(string data);
}

设计网络资源库:

public class DesignWebRepository : IWebRepository
{
public string Test(string data)
{
return "design result: " + data;
}
}

网络资源库:

public class WebRepository : IWebRepository
{
public string Test(string data)
{
return "result: " + data;
}
}

主视图模型:

public class MainViewModel : ViewModelBase
{
IWebRepository webRepository;

public MainViewModel(IWebRepository webRepository)
{
this.webRepository = webRepository;
if (IsInDesignMode)
{
// Code runs in Blend --> create design time data.
}
else
{
// Code runs "for real"
}
}
}

我在这里错过了什么?

最佳答案

        if (ViewModelBase.IsInDesignModeStatic)
{
if (!SimpleIoc.Default.IsRegistered<IRepository>())
{
SimpleIoc.Default.Register<IRepository, DesignWebRepository>();
}
}
else
{
SimpleIoc.Default.Register<IRepository, WebRepository>();
}

注意检查存储库是否已注册以防止重复注册。希望这能解决您的问题

关于mvvm-light - 在 MVVM Light 和 SimpleIOC 中使用设计时存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10465915/

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