Tidak dapat memanggil perkhidmatan dalam komponen Blazor
P粉351138462
P粉351138462 2023-08-31 12:01:02
0
2
565
<p>Saya mempunyai perkhidmatan yang kelihatan seperti ini: </p> <pre class="brush:php;toolbar:false;">namespace Hydra.Services { Pekerja kelas awam { url rentetan awam { dapatkan; public async Task<EmployeeModel> // Kembalikan data JSON } } }</pre> <p>Saya mahu memanggil perkhidmatan ini dalam komponen <kod>Syarikat</code> <pre class="brush:php;toolbar:false;">@page "/" <div> @syarikat ... </div> <!-- OK, butiran syarikat telah diberikan <div> @Pekerja ... </div> <!-- System.NullReferenceException: 'Rujukan objek tidak ditetapkan kepada contoh objek. ' --> @kod { rentetan syarikat; rentetan emlpoyee; protected override async Task OnInitializedAsync() menggunakan (klien HttpClient = HttpClient baharu()) { // Dapatkan butiran syarikat // Inilah masalahnya: EmployeeModel emp = new Employee(); emp.url = "http://google.com"; emlpoyee = tunggu emp.Pekerja(); } } }</pre> <p>Jadi, tidak ada yang salah dengan logik untuk memaparkan syarikat, tetapi perkhidmatan Pekerja yang saya panggil di dalam menggunakan() nampaknya tidak berfungsi. Saya tidak tahu apa yang salah selain daripada kesilapan. </p> <p>Bukan perkara terlupa untuk memasukkan model atau menyuntik perkhidmatan. </p> <p>Saya hanya seorang pemula, jadi soalannya agak mudah. </p>
P粉351138462
P粉351138462

membalas semua(2)
P粉496886646

Anda mencipta pembolehubah:

@emlpoyee

Tetapi anda sedang menelefon @Employee, yang akan menjadi batal.

Cuba tukar kepada pembolehubah yang sebenarnya anda masukkan ke dalam pekerja:

@emlpoyee

Selain itu, saya rasa anda salah mengeja pembolehubah. Mungkin anda maksudkan @pekerja.

Anda mengisi segala-galanya di sini:

emlpoyee = await emp.Employee();

Jadi, daripada kod yang anda berikan, memanggil @emlpoyee masuk akal.

Begitu juga <div> @Employee ... </div> 改为 <div> @emlpoyee ... </div>

P粉513316221

Kod anda tidak melakukan suntikan perkhidmatan dengan betul. Saya membentangkan kepada anda satu kaedah yang saya gunakan dan ia berfungsi dengan betul, saya harap ia akan berguna kepada anda.

Pertama, anda perlu mencipta antara muka untuk perkhidmatan anda:

namespace Hydra.Services
{
    public interface IEmployee
    {
        Task<EmployeeModel> GetEmployee();
    }
}

Maka anda perlu mengubah suai perkhidmatan anda, mewarisi daripada antara muka di atas, seperti ini:

namespace Hydra.Services
{
    public class Employee:IEmployee
    {
        public async Task<EmployeeModel> GetEmployee()
        {
            // 返回JSON数据
        }
    }
}

Sekarang anda harus menyuntik perkhidmatan dalam Startup.csProgram.cs seperti ini:

services.AddScoped<IEmployee,Employee>();

Akhir sekali, anda harus menyuntik perkhidmatan anda dalam komponen yang diperlukan seperti yang ditunjukkan di bawah dan menggunakannya dengan mudah:

@page "/"
@using Hydra.Services
@inherits OwningComponentBase<IEmployee>

<div> @company ... </div> <!-- OK,公司详细信息已呈现 --> 
<div> @Employee ... </div>  <!-- System.NullReferenceException: '对象引用未设置为对象的实例。' -->

@code {

    private string company; 
    private EmployeeModel emlpoyee = new EmployeeModel; 

    private IEmployee employeeService => Service;

    protected override async Task OnInitializedAsync()
    
    // 获取公司详细信息


    // 这里是问题所在:
        EmployeeModel emp = new EmployeeModel();
        emp.url = "http://google.com";
        emlpoyee = await employeeService.GetEmployee(); 
    
}

Sudah tentu, kod anda mempunyai banyak isu struktur, dan anda mungkin hanya mahu menentukan masalah dalam bentuk kod contoh, jadi saya cuba menerangkan cara ia berfungsi menggunakan kod anda sendiri supaya contoh itu lebih khusus untuk anda .

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan