我正在嘗試使用一個在資料庫中添加用戶的 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>();
}
但我得到了這個例外: System.ArgumentNullException: 'Value cannot be null。引數名稱:提供者'
uj5u.com熱心網友回復:
首先,您應該在注冊 SignUpViewModel 之前初始化服務提供者,因為 Resolve 方法在其內部使用 serviceProvider 。可能您在代碼中使用了 Resolve 方法。需要檢查您的代碼
uj5u.com熱心網友回復:
在XamWebApiClient / App.xaml.cs中,查看建構式:
public App()
{
InitializeComponent();
Startup.ConfigureServices(); <-- Do you have this line?
MainPage = new AppShell();
}
該行在Startup.ConfigureServices();設定之前被呼叫MainPage。
這設定serviceProvider了,所以應該修復空例外。
解釋:呼叫“Resolve”來查找 HTTPClient 所需的任何服務的實作。
在您的情況下,其他地方的代碼可能是指IUserServices?
ConfigureServices必須在該代碼嘗試使用之前呼叫IUserServices.
重要提示:如果您使用了其他服務,但未在 中宣告ConfigureServices,那么您仍然會在該Resolve行獲得空例外。在這種情況下,請在VS 呼叫堆疊上找到顯示所要求的“服務”的行。
ConfigureServices該服務將需要另一個services.AddHttpClient<ISomeService, ...。(替換ISomeService為定義該服務的任何介面。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/480361.html
