【发布时间】:2022-12-15 04:12:35
【问题描述】:
我正在 .NET 6 中编写 Blazor WASM 应用程序。
从 Visual Studio 2022 运行时,该应用程序在 Debug 中正常运行,但是当我使用 dotnet publish -c Release --nologo 将其部署为静态站点并访问 localhost 上的 bin/Release/net6.0/publish/wwwroot 文件夹时,我收到以下错误:
Unhandled exception rendering component: Cannot provide a value for property 'ScopeFactory' on type 'MySolution.Pages.MyComponent' because the property has no setter.
我的组件如下所示:
public class MyComponent : OwningComponentBase
{
public IOptions Option { get; set; } = Options.Default;
protected override async Task OnInitializedAsync()
{
Options = await ScopedServices.GetRequiredService<Task<IOptions>>();
}
}
我像这样在Program.cs中添加服务
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddScoped<Task<IOptions>>(async op => await Options.Create(op.GetRequiredService<HttpClient>()));
Options.Create() 看起来像这样
public static async Task<IGameOptions> Create(HttpClient client)
{
var json = await client.GetStringAsync("/gameOptions.json");
var options = JsonConvert.DeserializeObject<Options>(json);
if (options is null)
{
throw new InvalidDataException("Given path contains invalid JSON object.");
}
return options;
}
我已经做了很多测试和搜索,但找不到任何东西。我试图在我的组件中只请求 HttpClient 服务,但即使这样也会抛出同样的错误。
我看到这是 DI 中的一些问题,但我使用 OwningComponentBase 管理 DI 范围,如 ASP.NET Core Blazor dependency injection 中所述。
什么可能导致它?
先感谢您
【问题讨论】:
-
你能提供真正的代码吗?投票暂时关闭,因为“无法重现”。
-
当然,这是回购协议gitlab.com/Joedmin/gamebook@JesseGood
-
有问题的部署版本在这里joedmin.gitlab.io/gamebook/preset/writer
标签: c# dependency-injection blazor blazor-webassembly asp.net-blazor