programing

'Microsoft' 유형에 대한 서비스가 없습니다.AsNetCore.MVC.기능 보기.'ITempDataDictionaryFactory'가 등록되었습니다.

muds 2023. 7. 15. 10:39
반응형

'Microsoft' 유형에 대한 서비스가 없습니다.AsNetCore.MVC.기능 보기.'ITempDataDictionaryFactory'가 등록되었습니다.

이 문제가 있습니다.'Microsoft' 유형에 대한 서비스가 없습니다.AsNetCore.MVC.기능 보기.'ITempDataDictionaryFactory'가 등록되었습니다.asp.net core 1.0에서는 액션이 뷰를 렌더링하려고 할 때 예외가 있는 것 같습니다.

제가 많이 찾아봤는데 해결책을 못 찾겠어요, 혹시 무슨 일이 일어나고 있고 어떻게 고칠 수 있는지 누가 좀 도와주시면 감사하겠습니다.

내 코드는 다음과 같습니다.

프로젝트.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?}");
        }
    }
}

솔루션:사용하다AddMvc()대신에AddMvcCore()Startup.cs효과가 있을 겁니다

다음과 같은 이유에 대한 자세한 내용은 이 문제를 참조하십시오.

대부분의 사용자는 변경 사항이 없으며 시작 코드에서 AddMvc() 및 UseMvc(...)를 계속 사용해야 합니다.

진정으로 용감한 사용자를 위해 최소한의 MVC 파이프라인으로 시작하여 맞춤형 프레임워크를 얻을 수 있는 기능을 추가할 수 있는 구성 환경이 제공됩니다.

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

다음에 대한 참조를 추가해야 할 수도 있습니다.Microsoft.AspNetCore.Mvc.ViewFeatureproject.json

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

사용 중인 경우2.x그 다음에 사용services.AddMvcCore().AddRazorViewEngine();당신의ConfigureServices

또한 추가하는 것을 기억하십시오..AddAuthorization()을 사용하는 경우Authorize속성, 그렇지 않으면 작동하지 않습니다.

업데이트:3.1이후의 사용.services.AddControllersWithViews();

오래된 게시물인 것은 알지만 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();
        });
    }
}

.NET Core 3.1에서는 다음을 추가해야 했습니다.

services.AddRazorPages();

ConfigureServices()

그리고 아래는Configure()Startup.cs

app.UseEndpoints(endpoints =>
{
     endpoints.MapRazorPages();
}

.NET Core 2.0의 경우 서비스 구성에서 다음을 사용합니다.

services.AddNodeServices();

솔루션:사용하다services.AddMvcCore(options => options.EnableEndpointRouting = false).AddRazorViewEngine();Startup.cs 에 있으면 작동할 것입니다.

이 코드는 asp.net core 3.1(MVC)에 대해 테스트되었습니다.

2022년에 .NET 6.0을 사용하여

이 줄을 Program.cs 에 추가합니다.

var builder = WebApplication.CreateBuilder(args); //After this line...
builder.Services.AddRazorPages(); //<--This line

현재 저도 같은 문제가 있습니다. 저도 당신처럼 Add McvCore를 사용하고 있었습니다.오류 자체를 설명하기 위해 컨트롤러 추가를 추가했습니다.WithViews service to ConfigureServices 기능과 그것은 나에게 문제를 해결했습니다. (나는 여전히 AddMvcCore도 사용합니다.)

    public void ConfigureServices(IServiceCollection services)
    {
        //...
        services.AddControllers();
        services.AddControllersWithViews();
        services.AddMvcCore();
        //...
    }    

다음 코드를 추가하기만 하면 작동합니다.

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

        }

에서 이 문제가 발생하는 사용자를 참조하십시오.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
    }
}

이건 내 경우에 효과가 있습니다.

services.AddMvcCore()
.AddApiExplorer();

당신은 startup.cs 에서 이것을 사용합니다.

services.AddSingleton<PartialViewResultExecutor>();

현재 VS 2022와 .NET 6를 사용하고 있습니다.

다음 줄은 설명한 대로 오류가 발생하여 전체 줄을 잘못 제거하려고 했지만 작동하지 않았습니다.문제가 되는 선:

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

SetCompatibilityVersion 부분을 제거하는 것만큼 간단했습니다.

services.AddMvc()

언급URL : https://stackoverflow.com/questions/38709538/no-service-for-type-microsoft-aspnetcore-mvc-viewfeatures-itempdatadictionaryfa

반응형