RSCG – Farskeptic.AutoCompose
RSCG – Farskeptic.AutoCompose
name | Farskeptic.AutoCompose |
nuget | https://www.nuget.org/packages/Farskeptic.AutoCompose/ |
link | https://github.com/farskeptic/AutoCompose |
author | farskeptic/jmagel |
Generating decorators for classes that implements interfaces.
This is how you can use Farskeptic.AutoCompose .
The code that you start with is
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 | < Project Sdk = "Microsoft.NET.Sdk" > < PropertyGroup > < OutputType >Exe</ OutputType > < TargetFramework >net8.0</ TargetFramework > < ImplicitUsings >enable</ ImplicitUsings > < Nullable >enable</ Nullable > </ PropertyGroup > < ItemGroup > < PackageReference Include = "Farskeptic.AutoCompose" Version = "1.0.1" /> </ ItemGroup > < PropertyGroup > < EmitCompilerGeneratedFiles >true</ EmitCompilerGeneratedFiles > < CompilerGeneratedFilesOutputPath >$(BaseIntermediateOutputPath)\GX</ CompilerGeneratedFilesOutputPath > </ PropertyGroup > </ Project > |
The code that you will use is
1 2 3 4 5 6 | using Decorator; ICoffee c = new Coffee(); c = new CoffeeWithLogging(c); await c.Prepare(); var ingredients = c.GetIngredients(); |
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 | namespace Decorator; internal class Coffee : ICoffee { public string ? Name { get ; set ; } public async Task< bool > Prepare() { Console.WriteLine( "start prepare coffee" ); await Task.Delay(1000); Console.WriteLine( "finish prepare coffee" ); return true ; } public string [] GetIngredients() => new [] { "water" , "coffee" }; } |
1 2 3 4 5 6 7 | namespace Decorator; internal interface ICoffee { Task< bool > Prepare(); string [] GetIngredients(); } |
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 | using AutoCompose.Generator.Attributes; namespace Decorator; [AutoCompose( typeof (ICoffee), nameof(_cof))] internal partial class CoffeeWithLogging : ICoffee { protected ICoffee _cof; public CoffeeWithLogging(ICoffee cof) { this ._cof = cof; } public string [] GetIngredients() { Console.WriteLine( "CoffeeWithLogging.GetIngredients" ); return this ._cof.GetIngredients(); } } |
The code that is generated is
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 | // <auto-generated> // WARNING: THIS CODE IS AUTO-GENERATED AT COMPILE-TIME. ANY CHANGES WILL BE OVERWRITTEN ON NEXT COMPILE. // </auto-generated> namespace Decorator { internal partial class CoffeeWithLogging { public virtual Task< bool > Prepare() { return _cof.Prepare(); } } } |
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/Farskeptic.AutoCompose
Leave a Reply