Zooper.Squid
1.0.0
See the version list below for details.
dotnet add package Zooper.Squid --version 1.0.0
NuGet\Install-Package Zooper.Squid -Version 1.0.0
<PackageReference Include="Zooper.Squid" Version="1.0.0" />
<PackageVersion Include="Zooper.Squid" Version="1.0.0" />
<PackageReference Include="Zooper.Squid" />
paket add Zooper.Squid --version 1.0.0
#r "nuget: Zooper.Squid, 1.0.0"
#:package Zooper.Squid@1.0.0
#addin nuget:?package=Zooper.Squid&version=1.0.0
#tool nuget:?package=Zooper.Squid&version=1.0.0
Zooper.Squid
<img src="icon.png" alt="Zooper.Squid Logo" width="120" align="right"/>
Zooper.Squid is a lightweight .NET library that simplifies the creation of modular ASP.NET Core applications. It provides a clean and intuitive way to organize your application into independent, reusable modules that can be easily configured and composed.
Key Features
- Modular Architecture: Break down your application into independent, focused modules
- Easy Configuration: Simple and intuitive module registration and configuration
- Dependency Injection: Automatic registration of modules in your DI container
- Flexible Composition: Mix and match modules to build your application
- Minimal Dependencies: Only depends on ASP.NET Core
- Type-safe: Leverages C#'s type system for robust module definitions
- Testable: Designed with testability in mind from the ground up
Installation
dotnet add package Zooper.Squid
Quick Start
Here's a basic example of creating a modular ASP.NET Core application with Zooper.Squid:
// Define your module (in your modules layer)
public class UserModule : AppModule
{
public override void ConfigureServices(WebApplicationBuilder builder)
{
builder.Services.AddScoped<IUserService, UserService>();
builder.Services.AddScoped<IUserRepository, UserRepository>();
}
public override void ConfigureMiddleware(WebApplication app)
{
app.MapControllers();
}
}
// Register modules in your Program.cs
var builder = WebApplication.CreateBuilder(args);
// Register your modules
builder.AddModules(typeof(UserModule));
var app = builder.Build();
// Configure your modules
app.UseModules();
app.Run();
Core Concepts
Modules
Modules are self-contained units of functionality that can be independently developed, tested, and deployed:
public class AuthenticationModule : AppModule
{
public override void ConfigureServices(WebApplicationBuilder builder)
{
builder.Services.AddAuthentication();
builder.Services.AddAuthorization();
}
public override void ConfigureMiddleware(WebApplication app)
{
app.UseAuthentication();
app.UseAuthorization();
}
}
Module Registration
Zooper.Squid provides a simple way to register your modules:
// Register a single module
builder.AddModules(typeof(AuthenticationModule));
// Register multiple modules
builder.AddModules(
typeof(AuthenticationModule),
typeof(UserModule),
typeof(LoggingModule)
);
Best Practices
Module Design
- Single Responsibility: Each module should have a single, well-defined purpose
- Encapsulation: Modules should encapsulate their implementation details
- Clear Boundaries: Define clear boundaries between modules
- Minimal Dependencies: Keep inter-module dependencies to a minimum
Module Implementation
- Configuration: Use ConfigureServices for service registration
- Middleware: Use ConfigureMiddleware for pipeline configuration
- Dependencies: Use constructor injection for module dependencies
- Error Handling: Implement proper error handling within modules
Testing
- Module Isolation: Test modules in isolation
- Integration Testing: Test module interactions
- Mock Dependencies: Use mocks for external dependencies
Examples
Check out the Zooper.Squid.Examples project for comprehensive examples including:
- Authentication module
- User management module
- Logging module
- API module
- Different module configurations
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Related Projects
- Zooper.Octopus - Hexagonal Architecture implementation
- Zooper.Bee - Fluent workflow framework
- Zooper.Fox - Functional programming primitives
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net6.0
- Microsoft.AspNetCore.Hosting.Abstractions (>= 2.2.0)
- Microsoft.AspNetCore.Http.Abstractions (>= 2.2.0)
- Microsoft.Extensions.DependencyInjection (>= 2.2.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 2.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.