System.ArgumentNullException: 'Value cannot be null. Parameter name: provider'



我正在尝试使用一个在数据库中添加用户的web api,所以我创建了这个启动类:

public static class Startup
{
private static IServiceProvider serviceProvider;
public static void ConfigureServices()
{
var services = new ServiceCollection();
//add services
services.AddHttpClient<IUserServices, ApiUserServices>(c => 
{
c.BaseAddress = new Uri("http://10.0.2.2:9129/api/");
c.DefaultRequestHeaders.Add("Accept", "application/json");
});
//add viewmodels
services.AddTransient<SignUpPageViewModel>();
serviceProvider = services.BuildServiceProvider();
}

public static T Resolve<T>() => serviceProvider.GetService<T>();
}

但是我得到了这个异常:系统。参数不能为空。参数名称:provider'

首先,你应该在注册SignUpViewModel之前初始化service provider,因为Resolve方法在自己内部使用serviceProvider。可能你在代码中使用了Resolve方法。需要检查代码

在xamwebapicclient/App.xaml.cs中,查看构造函数:

public App()
{
InitializeComponent();
Startup.ConfigureServices();   <-- Do you have this line?

MainPage = new AppShell();
}

在设置MainPage之前调用Startup.ConfigureServices();

设置了serviceProvider,所以应该修复null异常。

解释:"Resolve"被调用以查找HTTPClient所需的任何服务的实现。

在您的情况下,其他地方的代码可能指的是IUserServices?

ConfigureServices必须在代码尝试使用IUserServices之前被调用。


重要:如果您使用了其他服务,但没有在ConfigureServices中声明,那么您仍然会在Resolve行中获得空异常。在这种情况下,在VS调用堆栈中找到显示"服务"的行。

ConfigureServices将需要另一个services.AddHttpClient<ISomeService, ...来提供该服务。(将ISomeService替换为定义该服务的任何接口)

相关内容

  • 没有找到相关文章

最新更新