c# asp.net asp.net-mvc asp.net-core-1.0

c# - No se ha registrado ningún servicio para el tipo ''Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory''



asp.net asp.net-mvc (6)

Tengo este problema: no se ha registrado ningún servicio para el tipo ''Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory''. En asp.net core 1.0, parece que cuando la acción intenta representar la vista, tengo esa excepción.

He buscado mucho pero no encontré una solución para esto, si alguien me puede ayudar a averiguar qué está sucediendo y cómo puedo solucionarlo, lo apreciaré.

Mi código a continuación:

Mi archivo project.json

{ "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%" ] } }

Mi archivo Startup.cs

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?}"); } } }


Éste funciona para mi caso:

services.AddMvcCore() .AddApiExplorer();


Para .NET Core 2.0, en ConfigureServices, use:

services.AddNodeServices();


Para aquellos que tienen este problema durante la actualización de .NetCore 1.X -> 2.0, actualice su Program.cs y 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 } }


Si está utilizando 2.0 , use services.AddMvcCore().AddRazorViewEngine(); en sus servicios de ConfigureServices

También recuerde agregar .AddAuthorization() si está usando el atributo Authorize , de lo contrario no funcionará.


Solo agrega el siguiente código y debería funcionar:

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


Solución: Use AddMvc() lugar de AddMvcCore() en Startup.cs y funcionará.

Consulte este tema para obtener más información sobre por qué:

Para la mayoría de los usuarios no habrá cambios, y debe continuar usando AddMvc () y UseMvc (...) en su código de inicio.

Para los realmente valientes, ahora hay una experiencia de configuración en la que puede comenzar con un mínimo MVC y agregar funciones para obtener un marco personalizado.

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

Es posible que también deba agregar una referencia a Microsoft.AspNetCore.Mvc.ViewFeature en project.json

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