Impossible d'appeler le service dans le composant Blazor
P粉351138462
P粉351138462 2023-08-31 12:01:02
0
2
526
<p>J'ai un service qui ressemble à ceci : </p> <pre class="brush:php;toolbar:false;">espace de noms Hydra.Services { Employé de classe publique { URL de chaîne publique { get ; set } Tâche asynchrone publique<EmployeeModel> GetEmployee(){ // Renvoie les données JSON } } }</pré> <p>Je souhaite appeler ce service dans mon composant <code>Company</code> <pre class="brush:php;toolbar:false;">@page "/" <div> @company ... </div> <!-- OK, les détails de l'entreprise ont été rendus --> <div> @Employee ... </div> <!-- System.NullReferenceException : 'La référence d'objet n'est pas définie sur une instance d'un objet. ' ---> @code { chaîne d'entreprise ; chaîne emlpoyee ; Tâche asynchrone de remplacement protégé OnInitializedAsync() en utilisant (client HttpClient = new HttpClient()) { // Obtenir les détails de l'entreprise // Voici le problème : EmployeeModel emp = new Employee(); emp.url = "http://google.com"; emlpoyee = attendre emp.Employee(); } } }</pré> <p>Donc, il n'y a rien de mal avec la logique d'affichage de l'entreprise, mais le service Employee que j'appelle à l'intérieur using() ne semble pas fonctionner. Je ne sais pas ce qui ne va pas à part l'erreur. </p> <p>Il ne s’agit pas d’oublier d’inclure un modèle ou d’injecter un service. </p> <p>Je ne suis qu'un débutant, les questions sont donc relativement simples. </p>
P粉351138462
P粉351138462

répondre à tous(2)
P粉496886646

Vous avez créé la variable :

@emlpoyee

Mais vous appelez @Employee, ce qui sera nul.

Essayez de passer à la variable que vous avez réellement saisie dans l'employé :

@emlpoyee

De plus, je pense que vous avez mal orthographié la variable. Peut-être que vous voulez dire @employé.

Vous avez tout rempli ici :

emlpoyee = await emp.Employee();

Donc, d'après le code que vous avez fourni, appeler @emlpoyee est logique.

Et aussi <div> @Employee ... </div> 改为 <div> @emlpoyee ... </div>

P粉513316221

Votre code n'effectue pas correctement l'injection de service. Je vous présente une méthode que j'utilise et qui fonctionne correctement, j'espère qu'elle vous sera utile.

Tout d'abord, vous devez créer une interface pour votre service :

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

Vous devez ensuite modifier votre service, en héritant de l'interface ci-dessus, comme suit :

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

Maintenant, vous devriez injecter le service dans Startup.csProgram.cs comme ceci :

services.AddScoped<IEmployee,Employee>();

Enfin, vous devez injecter votre service dans le composant requis comme indiqué ci-dessous et l'utiliser facilement :

@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(); 
    
}

Bien sûr, votre code présente de nombreux problèmes structurels, et vous souhaiterez peut-être simplement spécifier le problème sous forme d'exemple de code. J'ai donc essayé d'expliquer comment cela fonctionne en utilisant votre propre code afin que l'exemple vous soit plus spécifique. .

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal