![](/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.