5
respostas

Como resolver esse problema? asp.net core

the configureservices method must either be parameterless or take only one parameter of type iservicecollection

Como resolver esse problema? Na classe startup.cs

5 respostas

Olá Michael, tudo certo?

Está usando as versões recomendadas neste curso?

Se estiver usando as versões recomendadas, tem como compartilhar seu projeto comigo via Dropbox, Google Drive ou pelo GitHub? Assim posso dar uma olhada nele.

No aguardo!

Startup.cs

using Alura.ListaLeitura.App.Negocio; using Alura.ListaLeitura.App.Repositorio; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; using System; using System.Collections.Generic; using System.Threading.Tasks;

namespace Alura.ListaLeitura.App { public class Startup { public void ConfigureServices(IServicesCollection services) {

        services.AddRouting();
    }

    public void Configure(IApplicationBuilder app)
    {
        var builder = new RouteBuilder(app);

        builder.MapRoute("Livros/ParaLer", LivrosParaLer);
        builder.MapRoute("Livros/Lendo", LivrosLendo);
        builder.MapRoute("Livros/Lidos", LivrosLidos);
        builder.MapRoute("Cadastro/NovoLivro/{nome}/{autor}", NovoLivroParaLer);
        var rotas = builder.Build();

        app.UseRouter(rotas);

        //app.Run(Roteamento);
    }

    public Task NovoLivroParaLer(HttpContext context)
    {
        var livro = new Livro()
        {
            Titulo = Convert.ToString(context.GetRouteValue("nome")),
            Autor = Convert.ToString(context.GetRouteValue("autor")),
        };
        var repo = new LivroRepositorioCSV();
        repo.Incluir(livro);
        return context.Response.WriteAsync("O Livro foi adicionado com sucesso");
    }


    public Task Roteamento(HttpContext context)
    {
        var _repo = new LivroRepositorioCSV();
        var caminhosAtendidos = new Dictionary<string, RequestDelegate>
        {
            { "/Livros/ParaLer", LivrosParaLer },
            { "/Livros/Lendo", LivrosLendo },
            { "/Livros/Lidos", LivrosLidos }

        };

        if (caminhosAtendidos.ContainsKey(context.Request.Path))
        {
            var metodo = caminhosAtendidos[context.Request.Path];
            return metodo.Invoke(context);
        }

        context.Response.StatusCode = 404;
        return context.Response.WriteAsync("Caminho inexistente.");
    }

    public Task LivrosParaLer(HttpContext context)
    {
        var _repo = new LivroRepositorioCSV();
        return context.Response.WriteAsync(_repo.ParaLer.ToString());
    }

    public Task LivrosLendo(HttpContext context)
    {
        var _repo = new LivroRepositorioCSV();
        return context.Response.WriteAsync(_repo.Lendo.ToString());
    }

    public Task LivrosLidos(HttpContext context)
    {
        var _repo = new LivroRepositorioCSV();
        return context.Response.WriteAsync(_repo.Lidos.ToString());
    }
}

}

Program.cs

using Alura.ListaLeitura.App.Negocio; using Alura.ListaLeitura.App.Repositorio; using Microsoft.AspNetCore.Hosting; using System;

namespace Alura.ListaLeitura.App { class Program { static void Main(string[] args) {

        var _repo = new LivroRepositorioCSV();

        IWebHost host = new WebHostBuilder()
            .UseKestrel()
            .UseStartup<Startup>()
            .Build();
        host.Run();

        //ImprimeLista(_repo.ParaLer);
        //ImprimeLista(_repo.Lendo);
        //ImprimeLista(_repo.Lidos);
    }

    static void ImprimeLista(ListaDeLeitura lista)
    {
        Console.WriteLine(lista);
    }
}

}

IServicesCollection.cs

namespace Alura.ListaLeitura.App { public interface IServicesCollection { void AddRouting(); } }

Olá Michael, peço que compartilhe o projeto completo. Pode ser um arquivo zip, para que eu possa testar. Apenas vendo o código não me parece ter nada de errado.

No aguardo!

Eu incluir public void ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection services)

e funcionou sabe me explicar pq?

Certo Michael, Microsoft.Extensions.DependencyInjection é o namespace que está contida a interface IServiceCollection.

Se lá em cima do seu código não tiver using Microsoft.Extensions.DependencyInjection;, você precisa colocar o namespace completo antes da classe, ou interface neste caso. Foi apenas falta de uso do namespace mesmo :)