Blazor コンポーネントでサービスを呼び出すことができません
P粉351138462
2023-08-31 12:01:02
<p>次のようなサービスがあります: </p>
<pre class="brush:php;toolbar:false;">名前空間 Hydra.Services
{
パブリッククラスの従業員
{
パブリック文字列 URL { 取得; 設定; }
public async Task<EmployeeModel> GetEmployee(){
// JSONデータを返す
}
}
}</pre>
<p><code>Company</code> コンポーネントでこのサービスを呼び出したいです: </p>
<pre class="brush:php;toolbar:false;">@page "/"
<div> @company ... </div> <!-- OK、会社の詳細が表示されました -->
<div> @Employee ... </div> <!-- System.NullReferenceException: 'オブジェクト参照がオブジェクトのインスタンスに設定されていません。 ' -->
@コード{
会社文字列。
従業員文字列;
protected オーバーライド非同期タスク OnInitializedAsync()
(HttpClient クライアント = new HttpClient()) を使用します
{
// 会社の詳細を取得する
// ここに問題があります:
EmployeeModel emp = new Employee();
emp.url = "http://google.com";
emlpoyee = 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
にサービスを挿入する必要があります:最後に、以下に示すように必要なコンポーネントにサービスを挿入し、簡単に使用できるようにする必要があります。 リーリー
もちろん、コードには多くの構造上の問題があり、コード例の形式で問題を特定したい場合もあります。そのため、サンプルがより具体的になるように、独自のコードを使用してコードがどのように機能するかを説明しようとしました。あなたへ。