我正在使用 MVVM Light 编写 WPF 应用程序,我最初的想法是使用静态 Httpclient 来从多个设备中抽象数据,关于使用静态 Httpclient 的 DNS 存在问题。那么,如果我要使用 IHttpClientFactory,我应该如何进行设置?
我读的是我的 MainViewModel 构造函数需要这样做:
public class MainViewModel : ViewModelBase
{
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
///
private readonly IHttpClientFactory httpClientFactory;
public MainViewModel(IHttpClientFactory httpClientFactory)
{
this.httpClientFactory = httpClientFactory;
var client = httpClientFactory.CreateClient();
}
}
我在这里有两个问题:
a) 我无法在 ViewLocator 注册 MainViewModel
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
{
// Create design time view services and models
// SimpleIoc.Default.Register<IDataService, DesignDataService>();
}
else
{
/// // Create run time view services and models
//SimpleIoc.Default.Register<IDataService, DataService>();
}
SimpleIoc.Default.Register<IHttpClientFactory, MainViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance< MainViewModel>(); --> Error
"ServiceLocator.ActivationException: 'Type not found in cache: "
}
}
b)在启动时是否需要以下要求,我应该在哪里使用这种方法?
private void ConfigureServices(IServiceCollection services)
{
// ...
services.AddHttpClient();
services.AddTransient(typeof(MainWindow)); ---> ? valid for MVVM?
}
或者有人在 WPF 中使用 IHttpClientFactory 和 MVVM Light?
谢谢
西蒙