Estou fazendo uma atividade com base no curso, eu tenho um arquivo json, e estou lendo esse json em uma classe, como chamo essa classe na statup pra usar no html?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Estou fazendo uma atividade com base no curso, eu tenho um arquivo json, e estou lendo esse json em uma classe, como chamo essa classe na statup pra usar no html?
Oi Natacha, tudo bem?
Esse arquivo json é para fazer a carga inicial de dados? Se for esse o caso, não recomendo fazer a chamada a partir da classe Startup. Em vez disso, faça a chamada da sua classe a partir da classe Program. No exemplo abaixo, a classe GerenciadorInicializacao possui um método InserirDadosIniciais para fazer a carga inicial dos dados a partir de um arquivo json:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace Catalogo.API
{
internal class GerenciadorInicializacao
{
internal static async Task InserirDadosIniciais(IServiceProvider services)
{
using (var scope = services.GetService<IServiceScopeFactory>().CreateScope())
{
var context = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
await GravarProdutos(context);
}
}
private static async Task GravarProdutos(ApplicationDbContext context)
{
var produtoDbSet = context.Set<Produto>();
var livros = await GetProdutosJson();
foreach (var livro in livros)
{
if (!produtoDbSet.Where(p => p.Codigo == livro.Codigo).Any())
{
await produtoDbSet.AddAsync(new Produto(livro.Codigo, livro.Nome, livro.Preco));
}
}
await context.SaveChangesAsync();
}
static async Task<List<Livro>> GetProdutosJson()
{
var json = await File.ReadAllTextAsync("livros.json");
return JsonConvert.DeserializeObject<List<Livro>>(json);
}
}
public class Livro
{
public string Codigo { get; set; }
public string Nome { get; set; }
public decimal Preco { get; set; }
}
}
Já na classe Program, você pode chamar o método GerenciadorInicializacao.InserirDadosIniciais() conforme abaixo:
public class Program
{
public static async Task Main(string[] args)
{
Console.Title = "Catalogo.API";
IWebHost host = BuildWebHost(args);
await GerenciadorInicializacao.InserirDadosIniciais(host.Services);
host.Run();
}
public static IWebHost BuildWebHost(string[] args)
{
return WebHost
.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}