Sau*_*abh 6 c# asp.net-core blazor blazor-client-side
我的应用程序中有一个 blazor 组件:
public class IndexComponent : ComponentBase
{
public string ContentRoot { get; set; }
public string WebRoot { get; set; }
private IHostingEnvironment HostingEnvironment;
public IndexComponent(IHostingEnvironment hostingEnvironment)
{
HostingEnvironment = hostingEnvironment;
}
protected override async Task OnInitAsync()
{
//Some Code Here
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在我的应用程序中使用 DI,例如 IHostingEnvironment。
代码在这里没有给出编译时错误,但是当我运行它时,它比在这个剃刀的文件后面的代码(Index.razor.g.cs 文件)中:
public class Index : IndexComponent
Run Code Online (Sandbox Code Playgroud)
在这一行它说:
没有给出对应于 IndexComponent.IndexComponent 的所需形式参数托管环境的参数
这可以通过在 Razor 文件中使用 @inject IHostingEnvironment 来解决,但我正在将我的功能块从 Razor 移动到 IndexComponent.cs 文件,因此需要它。
它都没有以下方式工作:
[Inject]
IHostingEnvironment HostingEnvironment
Run Code Online (Sandbox Code Playgroud)
什么会在这里工作?
注意:不使用 ViewModel
更新 1
在 StartUp.cs 中加入命名空间
using Microsoft.AspNetCore.Hosting.Internal;
Run Code Online (Sandbox Code Playgroud)
然后
services.AddSingleton<IHostingEnvironment>(new HostingEnvironment());
Run Code Online (Sandbox Code Playgroud)
它现在可以在客户端项目上注册 IHostingEnvironment,但它的属性(contentrootpath 和 webrootpath)没有值。
这里只有一个可用的东西是 EnvironmentName ,它的值总是 Production ,
Hen*_*man 10
更新:
错误来自 WebAssembly,因此它是一个客户端应用程序。客户端上没有 HostingEnvironment,因此该服务未注册。要是这样就没用了。
所以,退一步:为什么(你认为)你需要它?
您应该将其设置为受保护或公共读/写属性:
// in IndexComponent
[Inject]
protected IHostingEnvironment HostingEnvironment { get; set; }
Run Code Online (Sandbox Code Playgroud)
并删除构造函数参数。
旁注:IHostingEnvironment被标记为过时。
来自这个评论:
WASM:System.InvalidOperationException:无法为类型“JewelShut.Client.Pages.Index”上的属性“HostingEnvironment”提供值。没有类型为“Microsoft.AspNetCore.Hosting.IHostingEnvironment”的注册服务
我猜这是一个客户端Blazor 应用程序。(如果我的猜测有误,我很抱歉。)。在客户端 Blazor 上,IHostingEnvironment默认情况下不会在 DI 容器中注册。该错误仍然表明您尝试注入的服务尚未注册。注册服务:
在 Startup.cs 中:
public void ConfigureServices(IServiceCollection services)
{
//few sample for you
services.AddScoped<AuthenticationStateProvider, ApiAuthenticationStateProvider>();
services.AddAuthorizationCore();
//register the required services
//services.Add...
}
Run Code Online (Sandbox Code Playgroud)
如果注入的服务按照 @Henk Holterman 建议的方式注册是正确的答案。
| 归档时间: |
|
| 查看次数: |
5657 次 |
| 最近记录: |