ホームページ  >  に質問  >  本文

Blazor コンポーネントでサービスを呼び出すことができません

<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>
P粉351138462P粉351138462415日前459

全員に返信(2)返信します

  • P粉496886646

    P粉4968866462023-09-01 10:39:42

    変数を作成しました:

    リーリー

    ただし、@Employee を呼び出しているため、null になります。

    実際に従業員に設定した変数に切り替えてみてください:

    リーリー

    また、変数のスペルが間違っていると思います。おそらく @employee のことを言っているのでしょう。

    ここにすべてを入力しました:

    リーリー

    つまり、提供したコードから、@emlpoyee を呼び出すのは理にかなっています。

    したがって、<div> @Employee ... </div><div> @emlpoyee ... </div>

    に変更します。

    返事
    0
  • P粉513316221

    P粉5133162212023-09-01 09:57:36

    コードはサービス インジェクションを正しく実行しません。私が使用し、正しく機能する方法を紹介します。お役に立てば幸いです。

    まず、サービスのインターフェースを作成する必要があります:

    リーリー

    次に、上記のインターフェイスから継承するようにサービスを次のように変更する必要があります。

    リーリー

    次に、次のように Startup.cs または Program.cs にサービスを挿入する必要があります:

    リーリー

    最後に、以下に示すように必要なコンポーネントにサービスを挿入し、簡単に使用できるようにする必要があります。 リーリー

    もちろん、コードには多くの構造上の問題があり、コード例の形式で問題を特定したい場合もあります。そのため、サンプルがより具体的になるように、独自のコードを使用してコードがどのように機能するかを説明しようとしました。あなたへ。

    返事
    0
  • キャンセル返事