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.1.0-preview3" />Early 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 DI: DesignPatterns.Extensions.DependencyInjection is not included in the meta package — use a sibling project reference from the main repo until a separate package is published. See Dependency injection.
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