如何从服务中调用方法?
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
是由TmdbService
class实现的接口。如果你没有定义这样的接口那么你的代码应该是:
builder.Services.AddScoped<TmdbService>();
现在,您应该将 ITmdbService
注入到您的 Counter 组件中,就像这样
@page "/counter"
@inject ITmdbService TmdbService
请注意,我使用的是接口标识符,而不是 class 名称。如果你没有定义这样的接口,你应该这样做:
@inject TmdbService TmdbService
第一个 TmdbService,从左到右,是服务 class 名称。第二个 属性 名为 TmdbService 的对象实例被插入其中。
现在在你的代码中你可以像这样使用它:
TmdbService.GetAllMovieInfo(title);
请注意,如果客户端未定义该服务,则必须向该服务添加 using 语句。
服务逻辑:从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
是由TmdbService
class实现的接口。如果你没有定义这样的接口那么你的代码应该是:
builder.Services.AddScoped<TmdbService>();
现在,您应该将 ITmdbService
注入到您的 Counter 组件中,就像这样
@page "/counter"
@inject ITmdbService TmdbService
请注意,我使用的是接口标识符,而不是 class 名称。如果你没有定义这样的接口,你应该这样做:
@inject TmdbService TmdbService
第一个 TmdbService,从左到右,是服务 class 名称。第二个 属性 名为 TmdbService 的对象实例被插入其中。
现在在你的代码中你可以像这样使用它:
TmdbService.GetAllMovieInfo(title);
请注意,如果客户端未定义该服务,则必须向该服务添加 using 语句。