Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Note
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 10 dari artikel ini.
Warning
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 10 dari artikel ini.
Oleh Rick Anderson
ASP.NET Core aplikasi yang dibuat dengan templat web berisi kode startup aplikasi di file Program.cs.
Untuk Blazor panduan startup, yang menambahkan atau menggantikan panduan di artikel ini, lihat ASP.NET Core Blazor startup.
Kode startup aplikasi berikut mendukung beberapa jenis aplikasi:
using WebAll.Components;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthorization();
app.MapGet("/hi", () => "Hello!");
app.MapDefaultControllerRoute();
app.MapRazorPages();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.UseAntiforgery();
app.Run();
Aplikasi yang menggunakan EventSource dapat mengukur waktu startup untuk memahami dan mengoptimalkan performa startup. Peristiwa ServerReady dalam Microsoft.AspNetCore.Hosting mewakili titik di mana server siap merespons permintaan.
Perluas Startup dengan penyaring startup
Gunakan IStartupFilter:
Untuk mengonfigurasi middleware di awal atau akhir alur middleware aplikasi tanpa panggilan eksplisit ke
Use{Middleware}. GunakanIStartupFilteruntuk menambahkan default ke awal alur tanpa secara eksplisit mendaftarkan middleware default.IStartupFiltermemungkinkan komponen yang berbeda untuk memanggilUse{Middleware}atas nama penulis aplikasi.Untuk membuat jalur metode
Configure. IStartupFilter.Configure dapat mengatur middleware untuk dijalankan sebelum atau sesudah middleware yang ditambahkan oleh kode library.
Implementasi IStartupFilter menyediakan Configure metode yang menerima dan mengembalikan Action<IApplicationBuilder>. Menentukan IApplicationBuilder kelas untuk mengonfigurasi alur permintaan aplikasi. Untuk informasi selengkapnya, lihat Membuat alur middleware dengan IApplicationBuilder.
Setiap implementasi IStartupFilter dapat menambahkan satu atau beberapa middleware dalam alur permintaan. Filter dipanggil dalam urutan ditambahkan ke kontainer layanan. Filter dapat menambahkan middleware sebelum atau sesudah meneruskan kontrol ke filter berikutnya, sehingga ditambahkan ke awal atau akhir alur aplikasi.
Contoh berikut menunjukkan cara mendaftarkan middleware dengan IStartupFilter. Middleware RequestSetOptionsMiddleware mengatur nilai opsi dari parameter kueri.
public class RequestSetOptionsMiddleware
{
private readonly RequestDelegate _next;
public RequestSetOptionsMiddleware(RequestDelegate next)
{
_next = next;
}
// Test with https://localhost:5001/Privacy/?option=Hello
public async Task Invoke(HttpContext httpContext)
{
var option = httpContext.Request.Query["option"];
if (!string.IsNullOrWhiteSpace(option))
{
httpContext.Items["option"] = WebUtility.HtmlEncode(option);
}
await _next(httpContext);
}
}
dikonfigurasi RequestSetOptionsMiddleware di RequestSetOptionsStartupFilter kelas :
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
Implementasi IStartupFilter terdaftar dalam file Program.cs :
using WebStartup.Middleware;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
RequestSetOptionsStartupFilter>();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Saat parameter string kueri untuk option disediakan, middleware memproses penetapan nilai sebelum middleware ASP.NET Core merender respons:
@page
@model PrivacyModel
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];
Urutan eksekusi middleware ditetapkan oleh urutan IStartupFilter pendaftaran:
Beberapa implementasi
IStartupFiltermungkin berinteraksi dengan objek yang sama. Jika pemesanan penting, pesan pendaftaran layanan merekaIStartupFilteragar sesuai dengan urutan yang harus dijalankan middleware mereka.Perpustakaan dapat menambahkan middleware dengan satu atau beberapa implementasi
IStartupFilteryang berjalan sebelum atau setelah middleware aplikasi lain yang terdaftar diIStartupFilter. Untuk memanggilIStartupFiltermiddleware sebelum middleware ditambahkan oleh pustakaIStartupFilter:Posisikan pendaftaran layanan sebelum pustaka ditambahkan ke kontainer layanan.
Untuk memanggil selanjutnya, posisikan registrasi layanan setelah pustaka ditambahkan.
Anda tidak dapat memperluas aplikasi ASP.NET Core ketika mengganti Configure. Untuk informasi selengkapnya, lihat GitHub /dotnet/aspnetcore/issues #45372.
Penambahan konfigurasi pada saat startup dari komponen eksternal
Implementasi IHostingStartup memungkinkan penambahan penyempurnaan ke aplikasi saat startup dari rakitan eksternal di luar file Program.cs aplikasi. Untuk informasi selengkapnya, lihat Menggunakan rakitan startup hosting di ASP.NET Core.
Startup, Mengonfigurasi Layanan, dan Mengonfigurasi
Untuk informasi tentang penggunaan metode ConfigureServices dan Configure dengan model hosting minimal, lihat:
Konten terkait
Aplikasi ASP.NET Core yang dibuat dengan template web berisi kode pengaktifan aplikasi dalam file Program.cs.
Kode startup aplikasi berikut mendukung:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthorization();
app.MapGet("/hi", () => "Hello!");
app.MapDefaultControllerRoute();
app.MapRazorPages();
app.Run();
Untuk informasi selengkapnya tentang pengaktifan aplikasi, lihat gambaran umum dasar-dasar ASP.NET Core.
Perluas Startup dengan penyaring startup
Gunakan IStartupFilter:
- Untuk mengonfigurasi middleware di awal atau akhir alur middleware aplikasi tanpa panggilan eksplisit ke
Use{Middleware}. GunakanIStartupFilteruntuk menambahkan default ke awal alur tanpa secara eksplisit mendaftarkan middleware default.IStartupFiltermemungkinkan komponen yang berbeda untuk memanggilUse{Middleware}atas nama penulis aplikasi. - Untuk membuat jalur metode
Configure. IStartupFilter.Configure dapat mengatur middleware untuk dijalankan sebelum atau sesudah middleware yang ditambahkan oleh kode library.
IStartupFilter mengimplementasikan Configure, yang menerima dan mengembalikan Action<IApplicationBuilder>. Menentukan IApplicationBuilder kelas untuk mengonfigurasi alur permintaan aplikasi. Untuk informasi selengkapnya, lihat Membuat alur middleware dengan IApplicationBuilder.
Masing-masing IStartupFilter dapat menambahkan satu atau beberapa middleware dalam alur permintaan. Filter dipanggil dalam urutan ditambahkan ke kontainer layanan. Filter dapat menambahkan middleware sebelum atau sesudah meneruskan kontrol ke filter berikutnya, sehingga ditambahkan ke awal atau akhir alur aplikasi.
Contoh berikut menunjukkan cara mendaftarkan middleware dengan IStartupFilter. Middleware RequestSetOptionsMiddleware mengatur nilai opsi dari parameter kueri.
public class RequestSetOptionsMiddleware
{
private readonly RequestDelegate _next;
public RequestSetOptionsMiddleware(RequestDelegate next)
{
_next = next;
}
// Test with https://localhost:5001/Privacy/?option=Hello
public async Task Invoke(HttpContext httpContext)
{
var option = httpContext.Request.Query["option"];
if (!string.IsNullOrWhiteSpace(option))
{
httpContext.Items["option"] = WebUtility.HtmlEncode(option);
}
await _next(httpContext);
}
}
RequestSetOptionsMiddleware dikonfigurasi dalam kelas RequestSetOptionsStartupFilter.
namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
// </snippet1>
IStartupFilter terdaftar di Program.cs:
using WebStartup.Middleware;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
RequestSetOptionsStartupFilter>();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Saat parameter string kueri untuk option disediakan, middleware memproses penetapan nilai sebelum middleware ASP.NET Core merender respons:
@page
@model PrivacyModel
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];
Urutan eksekusi middleware ditetapkan oleh urutan IStartupFilter registrasi:
Beberapa
IStartupFilterimplementasi dapat berinteraksi dengan objek yang sama. Jika pemesanan penting, pesan pendaftaran layanan merekaIStartupFilteragar sesuai dengan urutan yang harus dijalankan middleware mereka.Pustaka dapat menambahkan middleware dengan satu atau beberapa
IStartupFilterimplementasi yang berjalan sebelum atau sesudah middleware aplikasi lain yang terdaftar denganIStartupFilter. Untuk memanggilIStartupFiltermiddleware sebelum middleware ditambahkan oleh pustakaIStartupFilter:- Posisikan pendaftaran layanan sebelum pustaka ditambahkan ke dalam kontainer layanan.
- Untuk memanggil layanan setelahnya, posisikan registrasi layanan setelah pustaka ditambahkan.
Catatan: Anda tidak dapat memperluas aplikasi ASP.NET Core saat mengambil alih Configure. Untuk informasi lebih lanjut, lihat masalah GitHub ini.
Tambahkan konfigurasi pada saat startup dari rakitan eksternal
Implementasi IHostingStartup memungkinkan penambahan penyempurnaan ke aplikasi saat startup dari rakitan eksternal di luar file aplikasi Program.cs . Untuk informasi selengkapnya, lihat Menggunakan rakitan startup hosting di ASP.NET Core.
Kelas Startup mengonfigurasi layanan dan alur permintaan aplikasi.
Kelas Startup
aplikasi ASP.NET Core menggunakan Startup kelas, yang dinamai Startup berdasarkan konvensi. Kelas Startup:
- Secara opsional menyertakan ConfigureServices metode untuk mengonfigurasi layanan aplikasi. Layanan adalah komponen yang dapat digunakan kembali yang menyediakan fungsionalitas aplikasi. Layanan terdaftar di
ConfigureServicesdan digunakan di seluruh aplikasi melalui injeksi dependensi (DI) atau ApplicationServices. - Configure Menyertakan metode untuk membuat alur pemrosesan permintaan aplikasi.
ConfigureServices dan Configure dipanggil oleh runtime ASP.NET Core saat aplikasi dimulai:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Sampel sebelumnya adalah untuk Razor Pages; versi MVC serupa.
Kelas Startup ditentukan saat host aplikasi dibuat. Kelas Startup biasanya ditentukan dengan memanggil WebHostBuilderExtensions.UseStartup/<TStartup> metode pada pembangun host:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Host menyediakan layanan yang tersedia untuk Startup konstruktor kelas. Aplikasi ini menambahkan layanan tambahan melalui ConfigureServices. Layanan host dan aplikasi tersedia di Configure dan di seluruh aplikasi.
Hanya jenis layanan berikut yang dapat disuntikkan ke Startup konstruktor saat menggunakan Host Generik (IHostBuilder):
public class Startup
{
private readonly IWebHostEnvironment _env;
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Configuration = configuration;
_env = env;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
if (_env.IsDevelopment())
{
}
else
{
}
}
}
Sebagian besar layanan tidak tersedia sampai metode Configure dipanggil.
Beberapa Perusahaan Rintisan
Saat aplikasi menentukan kelas terpisah Startup untuk lingkungan yang berbeda (misalnya, StartupDevelopment), kelas yang sesuai Startup dipilih saat runtime. Kelas yang akhiran namanya cocok dengan lingkungan saat ini diprioritaskan. Jika aplikasi dijalankan di Development lingkungan dan menyertakan Startup kelas dan StartupDevelopment kelas, StartupDevelopment kelas akan digunakan. Untuk informasi selengkapnya, lihat Menggunakan beberapa lingkungan.
Lihat Host untuk informasi selengkapnya tentang host. Untuk informasi tentang menangani kesalahan selama startup, lihat Penanganan Pengecualian Startup.
Metode ConfigureServices
Metode ConfigureServices adalah sebagai berikut:
- Optional.
- Dipanggil oleh host sebelum metode
Configureuntuk mengonfigurasi layanan aplikasi. - Di mana opsi konfigurasi diatur menurut konvensi.
Host dapat mengonfigurasi beberapa layanan sebelum Startup metode dipanggil. Untuk informasi selengkapnya, lihat Host.
Untuk fitur-fitur yang membutuhkan penyiapan yang signifikan, terdapat metode ekstensi pada IServiceCollection. Misalnya, TambahkanDbContext, TambahkanDefaultIdentity, TambahkanEntityFrameworkStores, dan TambahkanRazorPages:
public class Startup
{
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.AddDefaultIdentity<IdentityUser>(
options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
}
Menambahkan layanan ke wadah layanan menjadikannya tersedia dalam aplikasi dan metode Configure. Layanan diselesaikan melalui injeksi dependensi atau dari ApplicationServices.
Metode Konfigurasi
Metode Configure ini digunakan untuk menentukan bagaimana aplikasi merespons permintaan HTTP. Alur permintaan dikonfigurasi dengan menambahkan komponen middleware ke IApplicationBuilder instans.
IApplicationBuilder tersedia untuk Configure metode , tetapi tidak terdaftar dalam kontainer layanan. Hosting membuat IApplicationBuilder dan meneruskannya langsung ke Configure.
Templat ASP.NET Core mengonfigurasi alur dengan dukungan untuk:
- Halaman Pengecualian Pengembang
- Pengendali pengecualian
- Http Strict Transport Security (HSTS)
- Pengalihan HTTPS
- File statis
- ASP.NET Core MVC dan Razor Pages
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Sampel sebelumnya adalah untuk Razor Pages; versi MVC serupa.
Setiap Use metode ekstensi menambahkan satu atau beberapa komponen middleware ke alur permintaan. Misalnya, UseStaticFiles mengonfigurasi middleware untuk melayani file statis.
Setiap komponen middleware dalam pipeline permintaan berfungsi untuk mengaktifkan komponen berikutnya dalam pipeline atau memutus rantai, jika sesuai.
Layanan tambahan, seperti IWebHostEnvironment, ILoggerFactory, atau apa pun yang ditentukan dalam ConfigureServices, dapat dispesifikasikan dalam signature metode Configure. Layanan ini disuntikkan jika tersedia.
Untuk informasi selengkapnya tentang cara menggunakan IApplicationBuilder dan urutan pemrosesan middleware, lihat ASP.NET Core Middleware.
Mengonfigurasi layanan tanpa Startup
Untuk mengonfigurasi layanan dan alur pemrosesan permintaan tanpa menggunakan Startup kelas, panggil ConfigureServices dan Configure metode kenyamanan pada pembuat host. Beberapa panggilan untuk ConfigureServices ditambahkan satu dengan yang lain. Jika ada beberapa metode Configure yang dipanggil, maka panggilan terakhir Configure digunakan.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureServices(services =>
{
services.AddControllersWithViews();
})
.Configure(app =>
{
var loggerFactory = app.ApplicationServices
.GetRequiredService<ILoggerFactory>();
var logger = loggerFactory.CreateLogger<Program>();
var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
var config = app.ApplicationServices.GetRequiredService<IConfiguration>();
logger.LogInformation("Logged in Configure");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
var configValue = config["MyConfigKey"];
});
});
});
}
Perluas Startup dengan penyaring startup
Gunakan IStartupFilter:
- Untuk mengonfigurasi middleware di awal atau akhir dari jalur middleware aplikasi Configure tanpa pemanggilan eksplisit ke
Use{Middleware}.IStartupFilterdigunakan oleh ASP.NET Core untuk menambahkan default ke awal alur tanpa harus membuat penulis aplikasi secara eksplisit mendaftarkan middleware default.IStartupFiltermemungkinkan komponen yang berbeda untuk memanggilUse{Middleware}atas nama penulis aplikasi. - Untuk membuat jalur metode
Configure. IStartupFilter.Configure dapat mengatur middleware untuk dijalankan sebelum atau sesudah middleware yang ditambahkan oleh kode library.
IStartupFilter mengimplementasikan Configure, yang menerima dan mengembalikan Action<IApplicationBuilder>. Menentukan IApplicationBuilder kelas untuk mengonfigurasi alur permintaan aplikasi. Untuk informasi selengkapnya, lihat Membuat alur middleware dengan IApplicationBuilder.
Masing-masing IStartupFilter dapat menambahkan satu atau beberapa middleware dalam alur permintaan. Filter dipanggil dalam urutan ditambahkan ke kontainer layanan. Filter dapat menambahkan middleware sebelum atau sesudah meneruskan kontrol ke filter berikutnya, sehingga ditambahkan ke awal atau akhir alur aplikasi.
Contoh berikut menunjukkan cara mendaftarkan middleware dengan IStartupFilter. Middleware RequestSetOptionsMiddleware mengatur nilai opsi dari parameter kueri.
public class RequestSetOptionsMiddleware
{
private readonly RequestDelegate _next;
public RequestSetOptionsMiddleware( RequestDelegate next )
{
_next = next;
}
// Test with https://localhost:5001/Privacy/?option=Hello
public async Task Invoke(HttpContext httpContext)
{
var option = httpContext.Request.Query["option"];
if (!string.IsNullOrWhiteSpace(option))
{
httpContext.Items["option"] = WebUtility.HtmlEncode(option);
}
await _next(httpContext);
}
}
dikonfigurasi RequestSetOptionsMiddleware di RequestSetOptionsStartupFilter kelas :
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
IStartupFilter terdaftar dalam kontainer layanan di ConfigureServices.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureServices(services =>
{
services.AddTransient<IStartupFilter,
RequestSetOptionsStartupFilter>();
});
}
Saat parameter string kueri untuk option disediakan, middleware memproses penetapan nilai sebelum middleware ASP.NET Core merender respons.
Urutan eksekusi middleware ditetapkan oleh urutan IStartupFilter pendaftaran:
Beberapa
IStartupFilterimplementasi dapat berinteraksi dengan objek yang sama. Jika pemesanan penting, pesan pendaftaran layanan merekaIStartupFilteragar sesuai dengan urutan yang harus dijalankan middleware mereka.Perpustakaan dapat menambahkan middleware dengan satu atau beberapa implementasi
IStartupFilteryang berjalan sebelum atau sesudah middleware lain yang terdaftar denganIStartupFilter. Untuk memanggilIStartupFiltermiddleware sebelum middleware ditambahkan oleh pustakaIStartupFilter:- Posisikan pendaftaran layanan sebelum pustaka ditambahkan ke kontainer layanan.
- Untuk memanggil selanjutnya, posisikan registrasi layanan setelah pustaka ditambahkan.
Penambahan konfigurasi pada saat startup dari komponen eksternal
Implementasi IHostingStartup memungkinkan penambahan penyempurnaan ke aplikasi saat startup dari rakitan eksternal di luar kelas Startup aplikasi. Untuk informasi selengkapnya, lihat Menggunakan rakitan startup hosting di ASP.NET Core.
Sumber daya tambahan
ASP.NET Core