在 ASP.NET Core 6/NET 8.0 如何添加 Startup.cs

目录

如何添加Startup.cs文件

我们还能做什么?

我的项目做法参考


如何添加Startup.cs文件

使用 ASP.NET Core 6.0项目,您将找不到Startup.cs文件。默认情况下,此文件将被删除,并且是将注册依赖项和中间件放到了Program.cs中。但是,如果您是 Startup.cs 的粉丝或将项目升级到 ASP.NET Core 6.0,你可能仍想要使用 Startup.cs 文件。因此,在这篇文章中,让我们将了解如何在 ASP.NET Core 6 项目中添加 Startup.cs

使用 ASP.NET Core 6.0项目时,您的Program.cs文件可能会这样。

Program.csASP.NET Core Web 6应用模板的文件

复制代码
var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();
app.Run();

正如您在此处看到的,服务和中间件注册现在是此文件的一部分。而 Statup.cs 有 2 个方法 ConfigureServices()Configure(),我们在方法 ConfigureServices 中注册依赖关系/服务,在 Configure 中注册中间件。

现在使用 Program.cs,您需要在第 4 行之后注册您的服务/依赖项builder.Services.AddRazorPages();,并在第 6 行之后注册中间件var app = builder.Build();。请记住,在管道中注册中间件时,顺序很重要。

若要将 Startup.cs 添加到 ASP.NET Core 6.0 项目中 ,请添加一个名为Startup.cs的新文件 并添加以下代码。

复制代码
public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(WebApplication app, IWebHostEnvironment env)
    {
        if (!app.Environment.IsDevelopment())
        {
            app.UseExceptionHandler("/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.MapRazorPages();
        app.Run();
    }
}

构造函数和这两个方法中的代码是非常熟悉。从文件Program.cs中删除依赖项注册的代码并将其放入ConfigureService()方法中。同样,中间件注册码也从文件中删除并放入Configure() 方法中。

接下来,我们需要介绍 Program.cs 如何调用 Startup.cs 。因此,请将文件代码更新为以下内容。

复制代码
var builder = WebApplication.CreateBuilder(args);

var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);

var app = builder.Build();
startup.Configure(app, builder.Environment);

Startup.cs 类所需的所有对象都存在于 builder 对象中,因此我们可以将所需的对象传递给ConfigureService()Configure()方法。就是这样。您的项目应该正常运行

我们还能做什么?

这是添加Startup.cs的自定义方式,因此实际上我们不必遵循任何与该类相关的内置规则。我从不喜欢ConfigureService()Configure()这两个名称,因为它们并没有确切定义它们的用途。以前,无法重命名这些名称,但现在我可以给出一个有意义的名称。类似地,ConfigureService变成RegisterServicesConfigure变成SetupMiddleware

复制代码
var startup = new Startup(builder.Configuration);
startup.RegisterServices(builder.Services);

var app = builder.Build();
startup.SetupMiddlewares(app, builder.Environment);

在 ASP.NET Core 6 如何添加 Startup.cs | .NET 开发者指北 (luoyunchong.github.io)

在 ASP.NET Core 6 中添加Startup.cs的整洁方式 | .NET 开发者指北 (luoyunchong.github.io)

我的项目做法参考

.NET 8.0

Program.cs

复制代码
using Server.Start;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddRazorPages();
var app = builder.Build();
startup.Configure(app, builder.Environment);

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();

app.MapControllers();

app.Run();

手动添加Startup.cs

复制代码
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Server.IService;
using Server.Service;
using Server.Configuration;
using Server.IConfiguration;

namespace Server.Start
{
    public class Startup
    {
        public Startup(Microsoft.Extensions.Configuration.IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public Microsoft.Extensions.Configuration.IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();

            services.AddSingleton<IUtils, Utils>();
            services.AddTransient<IConfiguration.IConfiguration, Configuration.Configuration>();
            services.AddTransient<IEFContext.IEFContext, EFContext.EFContext>();
            services.AddTransient<ILoginService, LoginService>();
            services.AddTransient<IMenuService, MenuService>();
            services.AddTransient<IUserService, UserService>();

            services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseAuthorization();

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

此添加Startup 是为了ILoginServiceLoginService等进行注册依赖关系。

相关推荐
EatFan20 分钟前
一个二维码背后的系统设计:批次生成、绑定、扫码与数据统计怎么做?
java·后端·微信小程序·二维码·qrcode
石小石Orz25 分钟前
民间AI排行榜单新鲜出炉,Fable 5.1仅排第三
前端·后端·ai编程
小此方28 分钟前
Linux网络(十二):HTTP短连接与长连接:从Connection机制到Cookie、Session,彻底理解HTTP的无状态
服务器·网络·http
小灰灰搞电子38 分钟前
Rust Once 、OnceLock、LazyLock 一次性初始化详解
开发语言·后端·rust
我不会起名字3221 小时前
一天一道算法题(35):电话号码的字母组合
java·数据结构·后端·python·leetcode·go·回溯
星栈1 小时前
ADK-Rust 是什么?Rust 生态新一代 AI Agent 开发套件
后端·agent
千舟软件2 小时前
【宿舍管理小程序】新生入住不靠纸质表
大数据·运维·服务器·科技·业界资讯
盖伦发发2 小时前
业务开发常用设计模式:状态、策略、工厂、适配器、模板方法
后端·软件工程
程序员老赵2 小时前
Docker 部署 XXL-JOB:轻松搭建分布式任务调度平台
后端·docker·开源
用户233376852182 小时前
Docker镜像找不到排障实录-CRLF跨平台暗雷
后端