![](/img/trans.png)
[英]Dependency injection not working properly for my ASP.NET Core MVVM Blazor application
[英]Blazor service injection not working properly
我在Blazor 3.0.0-preview4-19216-03中針對客戶端應用有以下代碼:
namespace BlazorShared.Services
{
public interface ILogin
{
Task<string> Login();
}
public class LoginService : ILogin
{
private HttpClient _client;
public LoginService(HttpClient client)
{
_client = client;
}
public async Task<string> Login()
{
var myclient = new HttpClient();
var responseMessage = await myclient.GetAsync("http://www.google.es");
var content = await responseMessage.Content.ReadAsStringAsync();
Debug.WriteLine(content);
return content;
}
}
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ILogin, LoginService>();
}
public void Configure(IComponentsApplicationBuilder app)
{
app.AddComponent<App>("app");
}
}
和這個HTML
@functions {
public async Task Submit()
{
var str = await LoginService.Login(null, null, null);
Console.WriteLine(str);
}
}
完整的Razor文件: https : //pastebin.com/3LbQQvk0
我已經對其進行了測試,並且Web請求從未完成,並且無法在客戶端中顯示服務響應。 我已經按照說明嘗試在chrome中調試,而且我看到正在調用服務方法,但沒有調用服務的構造函數,據我了解,Blazor應該注入HttpClient。 有什么想法會發生什么嗎? 謝謝。
即使不是罪魁禍首,也以下內容是錯誤的...在LoginService中,您定義了一個HttpClient變量,您在其中分配了DI提供的HttpClient實例。 另一方面,您定義一個名為myclient的新HttpClient對象,並在Login方法中使用它。
您應該使用DI提供的對象。 您不應該自己定義HttpClient對象。 為什么呢 因為Blazor為您配置了它創建的HttpClient。 例如,設置文檔基礎URI,使您的Web應用程序可以作為SPA應用程序進行導航。
希望這可以幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.