我在尝试向客户端项目中注入一些服务时遇到了麻烦。在Program.cs
文件中,我具有以下内容:
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
await builder.Build().RunAsync();
ConfigureServices(builder.Services);
}
public static void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IMetamaskInterop, MetamaskBlazorInterop>();
services.AddSingleton<MetamaskService>();
services.AddSingleton<MetamaskInterceptor>();
}
}
在一个新组件中,我尝试如下注入这些服务:
@inject IJSRuntime JSRuntime;
@inject MetamaskService metamaskService;
@inject MetamaskInterceptor metamaskInterceptor;
但是这样做给我一个错误,它是以下内容:
感谢您的帮助或指导。
您不应ConfigureServices
在Program
类中引入新的静态方法。这不是引发异常的原因,但是它ConfigureServices
与Startup类中定义的方法的名称(过去在WebAssembly Blazor中使用,然后删除...)一样,具有很大的误导性。
有时,您可能需要第二种方法进行条件配置,但不要命名它ConfigureServices
。在当前实例中,您不需要第二种方法。只需按照下面的步骤进行即可。
当您使用第二种方法时,请勿在await builder.Build().RunAsync();
此代码构建和执行应用程序时运行,以免为时过晚而无法向服务集合添加更多服务。只需将IServiceCollection对象传递给第二个方法,当它返回build并运行您的应用程序时即可。
这是您代码的更新版本:
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddSingleton<IMetamaskInterop, MetamaskBlazorInterop>();
builder.Services.AddSingleton<MetamaskService>();
builder.Services.AddSingleton<MetamaskInterceptor>();
await builder.Build().RunAsync();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句