繁体   English   中英

如何在 ASP.NET Core 6 MVC 中创建启动 class

[英]How to create Startup class in ASP.NET Core 6 MVC

我是新手,正在学习 ASP.NET Core 6 MVC。 在我的教程中构建Startup class 时,我遇到了这个错误。

错误无法解析类型“Microsoft.Extensions.FileProviders.IFileProvider”的服务

这是我的Program.cs class:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

启动.cs Startup.cs

using Microsoft.Extensions.FileProviders;
using System;
using System.Collections.Generic;

namespace HCMUE_ASPCore_Lab02
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton<IFileProvider>
            (
                new PhysicalFileProvider
                (
                    Path.Combine(Directory.GetCurrentDirectory(), "wwwroot")
                )
            );
            services.AddMvc();
        }
    }
}

在阅读了很多帖子后,我知道 ASP.NET Core 6 的ProgramStartup已经改变,我的教程现在已经很旧了。 但我不知道如何更新我的ProgramStartup以适应 ASP.NET Core 6。

请帮我。 任何帮助,将不胜感激。

感谢您的阅读。

您要确保 static 文件中间件以及注入文件提供程序的任何服务最终都使用相同的实例。

var provider = new PhysicalFileProvider(
  Path.Combine(Directory.GetCurrentDirectory(), "wwwroot")
);
builder.Services.AddSingleton<IFileProvider>(provider);

...

app.UseStaticFiles(
  new StaticFileOptions{ 
    FileProvider = provider
  });

但是,如果您真的不需要其他文件提供程序,则可以改为将IWebHostEnvironment注入您的 controller 并重用默认的.WebRootFileProvider

错误消息是说您的应用程序正在尝试创建FileUploadController的实例,但它不知道如何创建IFileProvider的实例以传递给构造函数。

这是一个典型的依赖注入错误,你可以在这段代码中注册它:

builder.Services.AddSingleton<IFileProvider>(new PhysicalFileProvider
                (
                    Path.Combine(Directory.GetCurrentDirectory(), "wwwroot")
                ));

您可以按照此文档了解 .Net 6 中的Dependency injection和其他基础知识。

如果您对.Net6的新变化不满意,可以根据本文添加Startup class。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM