web-dev-qa-db-fra.com

Aucun service pour le type 'Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory' n'a été enregistré

J'ai ce problème: Aucun service pour le type 'Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory' n'a été enregistré. Dans asp.net core 1.0, il semble que lorsque l'action essaie de rendre la vue, j'ai cette exception.

J'ai beaucoup cherché, mais je n'ai pas trouvé de solution. Si quelqu'un peut m'aider à comprendre ce qui se passe et comment puis-je résoudre ce problème, je l'apprécierai.

Mon code ci-dessous:

Mon project.json fichier

{
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"

    },
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "EntityFramework.Commands": "7.0.0-rc1-final"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dnxcore50",
        "portable-net45+win8"
      ]
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "web.config"
    ]
  },

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

Mon Startup.cs fichier

using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using OdeToFood.Services;

namespace OdeToFood
{
    public class Startup
    {
        public IConfiguration configuration { get; set; }
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit http://go.Microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {

            services.AddScoped<IRestaurantData, InMemoryRestaurantData>();
            services.AddMvcCore();
            services.AddSingleton(provider => configuration);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            //app.UseRuntimeInfoPage();

            app.UseFileServer();

            app.UseMvc(ConfigureRoutes);

            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!");
            });
        }

        private void ConfigureRoutes(IRouteBuilder routeBuilder)
        {
            routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}/{id?}");
        }
    }
}
26
Emmanuel Villegas

Solution: Utilisez AddMvc() au lieu de AddMvcCore() dans Startup.cs et cela fonctionnera.

S'il vous plaît voir ce numéro pour plus d'informations sur pourquoi: 

Pour la plupart des utilisateurs, il n'y aura aucun changement et vous devriez continuer à utiliser AddMvc () et UseMvc (...) dans votre code de démarrage.

Pour les plus courageux, il existe maintenant une expérience de configuration où vous peut commencer avec un pipeline MVC minimal et ajouter des fonctionnalités pour obtenir un cadre personnalisé.

https://github.com/aspnet/Mvc/issues/2872

Vous devrez peut-être aussi ajouter une référence ToMicrosoft.AspNetCore.Mvc.ViewFeature dans project.json

https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.ViewFeatures/

40
Jonas Stensved

Si vous utilisez 2.0, utilisez services.AddMvcCore().AddRazorViewEngine(); dans votre ConfigureServices

Pensez également à ajouter .AddAuthorization() si vous utilisez l'attribut Authorize, sinon cela ne fonctionnera pas.

17
CoOl

Pour .NET Core 2.0, dans ConfigureServices, utilisez:

services.AddNodeServices();
1
chaosifier

Ajoutez simplement le code suivant et cela devrait fonctionner: 

   public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvcCore()
                    .AddViews();

        }
0
Sudhir Jain

Celui-ci fonctionne pour mon cas: 

services.AddMvcCore()
.AddApiExplorer();
0
Saurin Vala

Pour ceux qui rencontrent ce problème lors de la mise à niveau .NetCore 1.X -> 2.0, mettez à jour vos Program.cs et Startup.cs

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

public class Startup
{
// The appsettings.json settings that get passed in as Configuration depends on 
// project properties->Debug-->Enviroment Variables-->ASPNETCORE_ENVIRONMENT
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

        services.AddTransient<IEmailSender, EmailSender>();

        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    // no change to this method leave yours how it is
    }
}
0
ono2012