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

Ir para a instalação

Informações da origem

Repositório
shinyorg/templates
Última atividade na origem
2 de abril de 2026 às 01:50
Idioma detectado do SKILL.md
inglês
Estrelas
155
Forks
15

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
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
Ver no GitHub