Не зарегистрировано ни одного сервиса для типа "Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory"
У меня возникла эта проблема: Нет службы для типа "Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory". В asp.net core 1.0 кажется, что когда действие пытается для отображения представления у меня есть это исключение.
Я много искал, но я не нашел для этого решения, если кто-то может помочь мне разобраться, что происходит, и как я могу его исправить, я по достоинству оценю его.
Мой нижеследующий код:
Мой файл 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?}");
}
}
}
Ответы
Ответ 1
Решение: Используйте 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/
Ответ 2
Если вы используете 2.0
, используйте services.AddMvcCore().AddRazorViewEngine();
в ConfigureServices
Также не забудьте добавить .AddAuthorization()
, если вы используете атрибут Authorize
, иначе он не будет работать.
Ответ 3
Для .NET Core 2.0 в ConfigureServices используйте:
services.AddNodeServices();
Ответ 4
Просто добавьте следующий код, и он должен работать:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore()
.AddViews();
}
Ответ 5
Для тех, кто получает эту проблему во время обновления .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
}
}
Ответ 6
Это работает для моего случая:
services.AddMvcCore()
.AddApiExplorer();
Ответ 7
Я знаю, что это старый пост, но это был мой лучший результат в Google, когда я столкнулся с этим после переноса проекта MVC в .NET Core 3.0. То, что мой Startup.cs
выглядел так, исправило это для меня:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
Ответ 8
Вы используете это в startup.cs
services.AddSingleton<PartialViewResultExecutor>();
Ответ 9
Чтобы иметь возможность возвращать данные JSON, необходимо зарегистрировать JsonFormatterServices
в контейнере внедрения зависимостей. Метод AddMvc()
делает это, но не метод AddMvcCore()
. Вы можете убедиться в этом, посмотрев исходный код на странице ASP.NET Core MVC Github.