Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Chamar método

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?

1 resposta
solução!

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