Getting started
Prerequisites
- .NET SDK 8 — libraries and samples target
net8.0(runtime also supportsnetstandard2.0) - Git
Install from NuGet (preview)
The meta package is published as Skymly.DesignPatterns on nuget.org. C# namespaces remain DesignPatterns.*.
<PackageReference Include="Skymly.DesignPatterns" Version="0.2.3-preview2" />Or from the command line:
dotnet add package Skymly.DesignPatterns --version 0.2.3-preview2Early preview
Public APIs, generated code, and DP### diagnostics are not stable yet. Pin the package version or a Git commit until a stability announcement.
Optional extensions (not included in the meta package):
dotnet add package Skymly.DesignPatterns.Extensions.DependencyInjection --version 0.2.3-preview2
dotnet add package Skymly.DesignPatterns.Extensions.Autofac --version 0.2.3-preview2
dotnet add package Skymly.DesignPatterns.Extensions.Configuration --version 0.2.3-preview2See Dependency injection and Configuration.
Clone layout (contributors)
Place repositories as siblings under the DesignPatterns project folder:
<workspace-root>/
Skymly/
DesignPatterns/
DesignPatterns/
DesignPatterns.Samples/
DesignPatterns.Docs/ ← this sitegit clone https://github.com/Skymly/DesignPatterns.git
git clone https://github.com/Skymly/DesignPatterns.Samples.gitBuild the generator solution
cd DesignPatterns
./build.ps1 --target Ci --configuration ReleaseThis runs unit tests, generator Verify snapshots, analyzer tests, and sibling Samples in CI.
First pattern: Strategy
Reference Skymly.DesignPatterns (NuGet) or a local pack / project reference. Mark implementations and a partial registry holder:
public interface IPaymentStrategy
{
string Pay(decimal amount);
}
[RegisterStrategy(typeof(IPaymentStrategy), "alipay")]
public sealed class AlipayPayment : IPaymentStrategy
{
public string Pay(decimal amount) => $"Alipay:${amount}";
}
public static partial class PaymentStrategyRegistry
{
// Generator emits Keys, Instance, and optional RegisterDi
}Use the generated registry:
var alipay = PaymentStrategyRegistry.Instance.Get(PaymentStrategyKeys.Alipay);See Strategy and DesignPatterns.Samples.Strategy.
Documentation site
cd DesignPatterns.Docs
npm install
npm run docs:dev