亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Blazor 組件文件中的依賴項注入

Blazor 組件文件中的依賴項注入

C#
波斯汪 2023-12-17 20:02:40
我的應用程序中有一個 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    }}我正在嘗試在我的應用程序中使用 DI,例如 IHostingEnvironment。代碼在這里沒有給出編譯時錯誤,但是當我運行它時,比該剃刀的代碼隱藏文件(Index.razor.g.cs 文件)中的代碼:public class Index : IndexComponent在這一行它說:沒有給出與所需正式要求相對應的論點 IndexComponent.IndexComponent的參數hostingEnvironment這可以通過在 Razor 文件中使用 @inject IHostingEnvironment 來解決,但我正在將功能塊從 Razor 移動到 IndexComponent.cs 文件,因此需要它。兩者都不能以下面的方式工作:[Inject]IHostingEnvironment HostingEnvironment這里有什么作用呢?注意:不使用ViewModel更新1在 StartUp.cs 中添加命名空間using Microsoft.AspNetCore.Hosting.Internal;然后services.AddSingleton<IHostingEnvironment>(new HostingEnvironment());現在可以在客戶端項目上注冊 IHostingEnvironment,但它沒有屬性值(contentrootpath 和 webrootpath)。這里只有一件事是可用的,那就是 EnvironmentName ,它的值始終是 Production ,
查看完整描述

3 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

更新:


該錯誤來自 WebAssembly,因此它是一個客戶端應用程序??蛻舳松蠜]有 HostingEnvironment,因此服務未注冊。如果是的話那就沒什么用了。


所以,退一步:為什么(你認為)你需要它?


您應該將其設為受保護或公共讀/寫屬性:


// in IndexComponent

[Inject]

protected IHostingEnvironment HostingEnvironment { get; set; }

并刪除構造函數參數。


旁注:IHostingEnvironment 已標記為已過時。


查看完整回答
反對 回復 2023-12-17
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

事實證明,對于 Blazor,您需要一個稍微不同的界面,即IWebAssemblyHostEnvironment。

從此文檔中,您應該注入的是:

@inject?IWebAssemblyHostEnvironment?HostEnvironment


查看完整回答
反對 回復 2023-12-17
?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

來自這個評論:

WASM:System.InvalidOperationException:無法為屬性“HostingEnvironment”提供值;在類型“JewelShut.Client.Pages.Index”上。沒有類型為“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...

}


查看完整回答
反對 回復 2023-12-17
  • 3 回答
  • 0 關注
  • 295 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號