Der Dienst in der Blazor-Komponente kann nicht aufgerufen werden
P粉351138462
2023-08-31 12:01:02
<p>Ich habe einen Dienst, der so aussieht: </p>
<pre class="brush:php;toolbar:false;">Namespace Hydra.Services
{
Mitarbeiter der öffentlichen Klasse
{
öffentliche String-URL { get;
öffentliche asynchrone Aufgabe<EmployeeModel>
// JSON-Daten zurückgeben
}
}
}</pre>
<p>Ich möchte diesen Dienst in meiner <code>Company</code>-Komponente aufrufen: </p>
<pre class="brush:php;toolbar:false;">@page "/"
<div> @company ... </div>!-- OK, Firmendetails wurden gerendert -->
<div> @Employee ... </div> <!-- System.NullReferenceException: 'Objektreferenz ist nicht auf eine Instanz eines Objekts festgelegt. ' -->
@code {
Unternehmenszeichenfolge;
Mitarbeiterzeichenfolge;
protected überschreibt die asynchrone Aufgabe OnInitializedAsync()
mit (HttpClient client = new HttpClient())
{
// Firmendetails abrufen
// Hier ist das Problem:
EmployeeModel emp = new Employee();
emp.url = "http://google.com";
emlpoyee = warte auf emp.Employee();
}
}
}</pre>
<p>An der Logik der Anzeige des Unternehmens ist also nichts auszusetzen, aber der Mitarbeiterdienst, den ich mit() aufrufe, scheint nicht zu funktionieren. Ich weiß nicht, was außer dem Fehler falsch ist. </p>
<p>Es geht nicht darum, zu vergessen, ein Modell einzuschließen oder einen Dienst einzubinden. </p>
<p>Ich bin nur ein Anfänger, daher sind die Fragen relativ einfach. </p>
您创建了变量:
但您正在调用
@Employee
,这将是 null。尝试切换到您实际放入员工的变量:
另外,我认为您拼写了变量错误。也许您的意思是 @employee。
您在这里填充了所有内容:
因此,从您提供的代码来看,调用 @emlpoyee 是有意义的。
所以将
<div> @Employee ... </div>
改为<div> @emlpoyee ... </div>
您的代码没有正确执行服务注入。我向您介绍一种我使用的方法,它可以正确工作,希望对您有用。
首先,您需要为您的服务创建一个接口:
然后,您需要修改您的服务,继承自上述接口,如下所示:
现在,您应该在
Startup.cs
或Program.cs
中注入服务,如下所示:最后,您应该在所需的组件中注入您的服务,如下所示,并轻松使用它:
当然,您的代码有很多结构问题,您可能只是想以示例代码的形式指定问题,因此我试图解释使用您自己的代码的工作方法,以便示例对您更具体。