Blazor服务注入无法正常工作

时间:2019-04-23 16:04:39

标签: c# asp.net-core blazor

我在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);
    }
}

完整的剃刀文件:https://pastebin.com/3LbQQvk0

我已经对其进行了测试,并且Web请求从未完成,并且我无法在客户端中显示服务响应。我尝试在instructions之后使用chrome进行调试,并且看到正在调用service方法,但没有调用服务的构造函数,而且据我了解,Blazor应该注入HttpClient。有什么想法会发生什么吗?谢谢。

1 个答案:

答案 0 :(得分:4)

以下是错误的,即使它不是罪魁祸首... 在LoginService中,定义一个HttpClient变量,在其中分配DI提供的HttpClient实例。另一方面,您定义一个名为myclient的新HttpClient对象,并在Login方法中使用它。

您应该使用DI提供的对象。您不应该自己定义HttpClient对象。为什么呢因为Blazor为您配置了它创建的HttpClient。例如,设置文档基础URI,使您的Web应用程序可以作为SPA应用程序进行导航。

希望这对您有帮助...