System.ArgumentNullException: 'Value cannot be null. Parameter name: provider'
System.ArgumentNullException: 'Value cannot be null. Parameter name: provider'
我正在尝试使用一个在数据库中添加用户的网络 api,所以我创建了这个启动程序 class:
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>();
}
但是我得到了这个例外:
System.ArgumentNullException: 'Value cannot be null. Parameter name: provider'
首先,您应该在注册 SignUpViewModel 之前初始化服务提供者,因为 Resolve 方法在其内部使用了 serviceProvider。可能您在代码中使用了 Resolve 方法。需要检查您的代码
在XamWebApiClient / App.xaml.cs中,看构造函数:
public App()
{
InitializeComponent();
Startup.ConfigureServices(); <-- Do you have this line?
MainPage = new AppShell();
}
行Startup.ConfigureServices();
在设置MainPage
之前被调用。
这设置了 serviceProvider
,所以应该修复 null 异常。
解释:“解析”被调用以查找 HTTPClient 所需的任何服务的实现。
在您的情况下,其他地方的代码可能指的是 IUserServices
?
ConfigureServices
必须在该代码尝试使用 IUserServices
.
之前调用
重要提示:如果您使用了其他服务,但未在 ConfigureServices
中声明,那么您仍然会在 Resolve
行上得到一个空异常。在这种情况下,在 VS Call Stack 上找到显示要求“服务”的行。
ConfigureServices
将需要另一个 services.AddHttpClient<ISomeService, ...
来提供该服务。 (将 ISomeService
替换为定义该服务的任何接口。)
我正在尝试使用一个在数据库中添加用户的网络 api,所以我创建了这个启动程序 class:
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>();
}
但是我得到了这个例外: System.ArgumentNullException: 'Value cannot be null. Parameter name: provider'
首先,您应该在注册 SignUpViewModel 之前初始化服务提供者,因为 Resolve 方法在其内部使用了 serviceProvider。可能您在代码中使用了 Resolve 方法。需要检查您的代码
在XamWebApiClient / App.xaml.cs中,看构造函数:
public App()
{
InitializeComponent();
Startup.ConfigureServices(); <-- Do you have this line?
MainPage = new AppShell();
}
行Startup.ConfigureServices();
在设置MainPage
之前被调用。
这设置了 serviceProvider
,所以应该修复 null 异常。
解释:“解析”被调用以查找 HTTPClient 所需的任何服务的实现。
在您的情况下,其他地方的代码可能指的是 IUserServices
?
ConfigureServices
必须在该代码尝试使用 IUserServices
.
重要提示:如果您使用了其他服务,但未在 ConfigureServices
中声明,那么您仍然会在 Resolve
行上得到一个空异常。在这种情况下,在 VS Call Stack 上找到显示要求“服务”的行。
ConfigureServices
将需要另一个 services.AddHttpClient<ISomeService, ...
来提供该服务。 (将 ISomeService
替换为定义该服务的任何接口。)