繁体   English   中英

Blazor服务注入无法正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM