Skip to main content

shiny-web-hosting

Generate and configure Shiny Web Hosting for .NET - modular ASP.NET Core application configuration with IWebModule for clean service registration and middleware setup

Zur Installation springen

Quellinformationen

Repository
shinyorg/templates
Letzte Quellaktivität
2. April 2026 um 01:50
Erkannte Sprache von SKILL.md
Englisch
Sterne
155
Forks
15

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
shiny-web-hosting
description
Generate and configure Shiny Web Hosting for .NET - modular ASP.NET Core application configuration with IWebModule for clean service registration and middleware setup
auto_invoke
true
triggers
["IWebModule","AddInfrastructureModules","UseInfrastructureModules","Shiny.Extensions.WebHosting","WebExtensions"]
# Shiny Web Hosting Skill You are an expert in Shiny Extensions Web Hosting, a .NET library providing modular ASP.NET Core application configuration via `IWebModule`. ## When to Use This Skill Invoke this skill when the user wants to: - Create ASP.NET web modules with `IWebModule` - Set up web hosting with modular service/middleware registration - Break apart a monolithic `Program.cs` into focused module classes ## Library Overview **Documentation**: https://shinylib.net/extensions/webhost/ **Repository**: https://github.com/shinyorg/Shiny.Extensions **Package**: `Shiny.Extensions.WebHosting` **Namespace**: `Shiny` ## IWebModule Interface ```csharp public interface IWebModule { void Add(WebApplicationBuilder builder); // Register services void Use(WebApplication app); // Configure middleware } ``` ## Creating Web Modules Each module implements `IWebModule` with two methods: - **`Add(WebApplicationBuilder builder)`** — register services, configuration, and anything before `Build()` - **`Use(WebApplication app)`** — configure middleware, endpoints, and anything after `Build()` ```csharp public class SwaggerModule : IWebModule { public void Add(WebApplicationBuilder builder) { builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); } public void Use(WebApplication app) { if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } } } public class CorsModule : IWebModule { public void Add(WebApplicationBuilder builder) { builder.Services.AddCors(options => { options.AddDefaultPolicy(policy => policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); }); } public void Use(WebApplication app) { app.UseCors(); } } public class AuthModule : IWebModule { public void Add(WebApplicationBuilder builder) { builder.Services.AddAuthentication().AddJwtBearer(); builder.Services.AddAuthorization(); } public void Use(WebApplication app) { app.UseAuthentication(); app.UseAuthorization(); } } ``` ## Setup ```csharp using Shiny; var builder = WebApplication.CreateBuilder(args); builder.AddInfrastructureModules( new SwaggerModule(), new CorsModule(), new AuthModule() ); var app = builder.Build(); app.UseInfrastructureModules(); app.Run(); ``` ## API ```csharp public static class WebExtensions { // Register module instances and call Add() on each public static WebApplicationBuilder AddInfrastructureModules( this WebApplicationBuilder builder, params IEnumerable<IWebModule> modules); // Call Use() on each module to configure middleware public static WebApplication UseInfrastructureModules( this WebApplication app, params IEnumerable<IWebModule> modules); } ``` ## Code Generation Instructions - One module per concern (CORS, auth, swagger, health checks, etc.) - Keep `Add()` for service registration and `Use()` for middleware configuration - Pass explicit module instances to `AddInfrastructureModules()` — no assembly scanning ## Best Practices 1. **One concern per module** - Create separate modules for CORS, auth, swagger, health checks, etc. 2. **Order matters for Use()** - Middleware order in `Use()` follows the order modules are registered 3. **Fully AOT-compatible** - No reflection or assembly scanning, explicit module registration only
Auf GitHub ansehen