2016-08-01 2 views
17

У меня возникла эта проблема: Нет службы для типа «Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory». В asp.net core 1.0, кажется, что когда действие пытается отобразить представление, у меня есть это исключение.Нет службы для типа «Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory» зарегистрирован

Я искал много, но я не нашел решения для этого, если кто-нибудь может помочь мне разобраться, что происходит, и как я могу это исправить, я буду этому благодарен.

Мой код ниже:

Мой 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%" ] 
    } 
} 

Мой 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?}"); 
     } 
    } 
} 
+0

Это происходит на определенной странице? Что вы пытаетесь сделать на этой странице? Также, когда вы прокомментируете регистрацию «IRestaurantData», смогли ли вы воспроизвести эту проблему? – Shyju

+0

@Shyju, спасибо за повтор, это происходит, когда я пытаюсь вызвать метод View() для отображения представления в любом действии моего homeController, всегда даже я не перегружаю метод. Он всегда генерирует исключение, также когда я комментирую служба регистрации IRestaurantData, проблема, которая все еще происходит, настолько странна в этой проблеме :(потому что кажется, что мне не хватает какого-либо пространства имен или что-то, но vs не показывают мне ничего неправильного в коде –

+0

@Shyju это пространство имен i использую: 'используя Microsoft.AspNetCore.Mvc;' ' с использованием OdeToFood.ViewModels;' ' с использованием OdeToFood.Services;' ' использованием OdeToFood.Entities;' –

ответ

32

Решение: Использование AddMvc() вместо AddMvcCore() в Startup.cs и он будет работать.

Пожалуйста, смотрите этот вопрос для получения дополнительной информации о том, почему:

Для большинства пользователей не будет никаких изменений, и вы должны продолжать использовать AddMvc() и UseMvc (...) в коде запуска ,

Для действительно храбрых, теперь есть опыт настройки, где вы можете начать с минимального конвейера MVC и добавить функции, чтобы получить настраиваемую инфраструктуру .

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

Вы также, возможно, придется добавить ссылку к Microsoft.AspNetCore.Mvc.ViewFeature в project.json

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

0

Просто добавьте следующий код и он должен работать:

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

     } 
0

Fo г те, которые получают этот вопрос во время .NetCore 1.X -> обновление 2.0, обновить как Program.cs и 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 
    } 
} 
4

Если вы используете 2.0 затем использовать services.AddMvcCore().AddRazorViewEngine(); в вашем ConfigureServices

Также не забудьте добавить .AddAuthorization(), если вы используете атрибут Authorize, иначе он не будет работать.