DecoratorGenerator 0.2.2
See the version list below for details.
dotnet add package DecoratorGenerator --version 0.2.2
NuGet\Install-Package DecoratorGenerator -Version 0.2.2
<PackageReference Include="DecoratorGenerator" Version="0.2.2" />
paket add DecoratorGenerator --version 0.2.2
#r "nuget: DecoratorGenerator, 0.2.2"
// Install DecoratorGenerator as a Cake Addin #addin nuget:?package=DecoratorGenerator&version=0.2.2 // Install DecoratorGenerator as a Cake Tool #tool nuget:?package=DecoratorGenerator&version=0.2.2
Decorator Generator
Source generator for decorator pattern boilerplate code in C#.
When implementing the decorator pattern in C#, it requires adding boilerplate code for every interface that needs to support decorators, namely the abstract class. Boilerplate is tedious to write and error-prone. This source generator solves this problem by automatically generating the abstract class. It only needs to be told which interfaces it should generate the abstract class for.
Getting Started
Installation
Add the library via NuGet to the project(s) that you want to auto-generate abstract decorator classes for:
- Either via Project > Manage NuGet Packages... / Browse / search for decorator-generator / Install
- Or by running a command in the Package Manager Console
Install-Package DecoratorGenerator
Usage
Add a Decorate
attribute to the interface:
using DecoratorGenerator;
namespace SampleLibrary;
[Decorate]
public interface ICat
{
string Meow();
}
Build the project so the abstract class is generated for the interface. The generated class will be named after the interface, but without the I
prefix. In this case, since the interface is ICat
the class will be CatDecorator
. Then create your decorator class as usual:
namespace SampleLibrary;
public class BarkingCat : CatDecorator
{
public BarkingCat(ICat cat) : base(cat)
{
}
public override string Meow()
{
return $"woof woof - {base.Meow()}";
}
}
Example usage of the decorator:
using SampleLibrary;
namespace SampleApp;
partial class Program
{
static void Main(string[] args)
{
var cat = new BarkingCat(new Cat());
var sound = cat.Meow();
Console.WriteLine(sound);
}
}
Configuration
List of Target Interfaces in a Config file
To generate decorator abstract classes for third party interfaces, Decorator Generator will look for a struct named WrapperList
and generate classes of the types in the fields of the WrapperList
:
using Amazon.DynamoDBv2.DataModel;
public struct WrapperList
{
IDynamoDBContext dynamoDBContext; // name the field whatever you want, it isn't used.
}
In this case, it will generate a class for IDynamoDBContext
called DynamoDBContextDecorator
. This feature will also work for your own interfaces if you prefer this approach instead of using the attribute.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.CodeAnalysis.Common (>= 4.7.0)
- Microsoft.CodeAnalysis.CSharp (>= 4.7.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
0.2.2
- Fix bug: interface property always generates with set and get.
0.2.1
- Minor/patch version update to some depenencies.
0.2.0
- Minor whitespace changes in generated files
- Uniform line ending type in generated files
0.1.4
- Add support for types with nested namespaces.