如何从服务中调用方法?

How to call method from services?

服务逻辑:从api获取数据并设置为属性。之后,我在 blazor 客户端上调用道具。 服务:

public class TmdbService
{
    private static JsonConfig _config = new JsonConfig();
    private readonly TMDbClient _client = new TMDbClient(_config.Settings.TApiKey);

    public async Task GetAllMovieInfo(string title, string lang = "ru")
    {
        SearchContainer<SearchMovie> results = await _client.SearchMovieAsync(title, lang);
        var movieData = results.Results.Take(1);
        foreach(var data in movieData)
        {
            new MovieDataDetail
            {
               Id = data.Id,
               Title = data.Title,
               OriginalTitle = data.OriginalTitle,
               ReleaseDate = data.ReleaseDate,
               Image = data.PosterPath,
               Popularity = data.Popularity,
               Overview = data.Overview
            } 
        }
    }
}

客户:

@page "/counter"
@using MovieApp.Shared.Services.TmdbApi
@using MovieApp.Shared.Models.MovieData

<div>
    <h1>The name of the movie: @detail.OriginalTitle</h1>
    <h1>The overview of the @title: @detail.Overview</h1>
    @*<h1>Ratings: @detail.IMDbRating</h1>*@
</div>

@code {
    TmdbService service;
    MovieDataDetail detail;
    string title = "lucy";

    protected override Task OnInitializedAsync()
    {
        detail = new MovieDataDetail();
        service = new TmdbService();
        return service.GetAllMovieInfo(title);
    }
}

我的服务在我的控制台项目中使用时运行良好。

A message from the error console:

我真的不知道如何解决它。请帮助我

注意:你们的服务是在服务端使用,还是在客户端使用?如果不是,则在客户端定义它们,而不是在共享项目上...

您不能像现在这样使用您的服务...您应该将您的服务添加到 DI 容器中,例如:

 builder.Services.AddScoped<ITmdbService, TmdbService>();

注意:上面的代码要在Client项目的Program.Main方法中设置 注:ITmdbService是由TmdbServiceclass实现的接口。如果你没有定义这样的接口那么你的代码应该是:

 builder.Services.AddScoped<TmdbService>();

现在,您应该将 ITmdbService 注入到您的 Counter 组件中,就像这样

@page "/counter"
@inject ITmdbService TmdbService

请注意,我使用的是接口标识符,而不是 class 名称。如果你没有定义这样的接口,你应该这样做:

@inject TmdbService TmdbService

第一个 TmdbService,从左到右,是服务 class 名称。第二个 属性 名为 TmdbService 的对象实例被插入其中。

现在在你的代码中你可以像这样使用它:

TmdbService.GetAllMovieInfo(title); 

请注意,如果客户端未定义该服务,则必须向该服务添加 using 语句。