無法在 Blazor 元件中呼叫服務
P粉351138462
2023-08-31 12:01:02
<p>我有類似下面這樣的服務:</p>
<pre class="brush:php;toolbar:false;">namespace Hydra.Services
{
public class Employee
{
public string url { get; set; }
public async Task<EmployeeModel> GetEmployee(){
// 回傳JSON數據
}
}
}</pre>
<p>我想要在我的<code>Commpany</code>元件中呼叫這個服務:</p>
<pre class="brush:php;toolbar:false;">@page "/"
<div> @company ... </div> <!-- OK,公司詳情已經渲染 -->
<div> @Employee ... </div> <!-- System.NullReferenceException: '物件引用未設定為物件的實例。 ' -->
@code {
company string;
emlpoyee string;
protected override async Task OnInitializedAsync()
using (HttpClient client = new HttpClient())
{
// 取得公司詳情
// 這裡是問題所在:
EmployeeModel emp = new Employee();
emp.url = "http://google.com";
emlpoyee = await emp.Employee();
}
}
}</pre>
<p>所以,顯示公司的邏輯沒有任何問題,但是我在using()內部呼叫的Employee服務似乎不起作用。除了錯誤之外,我不知道還有什麼問題。 </p>
<p>這不是忘記包含模型或註入服務的問題。 </p>
<p>我只是個初學者,所以問題比較簡單。 </p>
您建立了變數:
但您正在呼叫
@Employee
,這將是 null。嘗試切換到您實際放入員工的變數:
另外,我認為您拼寫了變數錯誤。也許您的意思是 @employee。
您在這裡填充了所有內容:
因此,從您提供的程式碼來看,呼叫 @emlpoyee 是有意義的。
所以將
#<div> @Employee ... </div>
改為<div> @emlpoyee ... </div>
您的程式碼沒有正確執行服務注入。我向您介紹一種我使用的方法,它可以正確工作,希望對您有用。
首先,您需要為您的服務建立一個介面:
然後,您需要修改您的服務,繼承自上述接口,如下所示:
現在,您應該在
Startup.cs
或Program.cs
中註入服務,如下所示:最後,您應該在所需的元件中註入您的服務,如下所示,並輕鬆使用它:
當然,您的程式碼有很多結構問題,您可能只是想以範例程式碼的形式指定問題,因此我試圖解釋使用您自己的程式碼的工作方法,以便示例對您更具體。