RSCG – WhatIAmDoing
RSCG – WhatIAmDoing
name | WhatIAmDoing |
nuget |
https://www.nuget.org/packages/RSCG_WhatIAmDoing/ https://www.nuget.org/packages/RSCG_WhatIAmDoing_Common/ |
link | https://github.com/ignatandrei/RSCG_WhatIAmDoing |
author | Ignat Andrei |
Intercept any method in any project
This is how you can use WhatIAmDoing .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <!-- <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" /> --> <PackageReference Include="RSCG_WhatIAmDoing" Version="8.2024.10201.735" /> <PackageReference Include="RSCG_WhatIAmDoing_Common" Version="8.2024.10201.735" /> </ItemGroup> <PropertyGroup> <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath> <InterceptorsPreviewNamespaces>$(InterceptorsPreviewNamespaces);RSCG_InterceptorTemplate</InterceptorsPreviewNamespaces> </PropertyGroup> </Project>
The code that you will use is
using RSCG_WhatIAmDoing_Common; Console.WriteLine("Hello, World!"); var data = CachingData.Methods().ToArray(); foreach (var item in data) { Console.WriteLine($"Method {item.typeAndMethodData.MethodName} from class {item.typeAndMethodData.TypeOfClass} Time: {item.StartedAtDate} state {item.State} "); Console.WriteLine($" =>Arguments: {item.ArgumentsAsString()}"); if ((item.State & AccumulatedStateMethod.HasResult) == AccumulatedStateMethod.HasResult) { Console.WriteLine($" =>Result: {item.Result}"); } }
using RSCG_WhatIAmDoing; using RSCG_WhatIAmDoing_Common; namespace WIADDemo; //[ExposeClass(typeof(Encoding), nameof(Encoding.EncodingName))] [InterceptStatic("System.Console.*")] // regex internal class InterceptorMethodStatic : InterceptorMethodStaticBase, IInterceptorMethodStatic { }
The code that is generated is
#pragma warning disable CS1591 #pragma warning disable CS9113 namespace System.Runtime.CompilerServices{ [AttributeUsage(AttributeTargets.Method,AllowMultiple =true)] file class InterceptsLocationAttribute(string filePath, int line, int character) : Attribute { } }//end namespace namespace RSCG_InterceptorTemplate{ static partial class SimpleIntercept { //replace code:Console.WriteLine("Hello, World!"); //replace code:123456789!123456789!123456789!12345 [System.Runtime.CompilerServices.InterceptsLocation(@"D:\gth\RSCG_Examples\v2\rscg_examples\WIAD\src\WIADDemo\WIADDemo\Program.cs", 3, 9)] //[System.Diagnostics.DebuggerStepThrough()] public static void Intercept__WriteLine_0 ( string? value ) { System.Collections.Generic.Dictionary<string,string?> valValues = new (){ };//end valValues System.Collections.Generic.Dictionary<string,string?> stringValues = new() { { "value", value ?.ToString() } , };//end stringValues System.Collections.Generic.Dictionary<string,string?> expValues = new() { };//end exposeValues var x=WIADDemo.InterceptorMethodStatic .InterceptStaticMethodBefore( $$$"""" {"IsVoid":true,"Tag":"","MethodName":"WriteLine","TypeOfClass":"System.Console"} """" ,valValues , stringValues , expValues ) ; try{ System.Console.WriteLine(value); WIADDemo.InterceptorMethodStatic .InterceptMethodAfterWithoutResult(x); } catch(System.Exception ex){ WIADDemo.InterceptorMethodStatic .InterceptMethodException(x,ex); throw; } finally{ WIADDemo.InterceptorMethodStatic .InterceptMethodFinally(x); } } }//end class }//namespace RSCG_InterceptorTemplate
#pragma warning disable CS1591 #pragma warning disable CS9113 namespace System.Runtime.CompilerServices{ [AttributeUsage(AttributeTargets.Method,AllowMultiple =true)] file class InterceptsLocationAttribute(string filePath, int line, int character) : Attribute { } }//end namespace namespace RSCG_InterceptorTemplate{ static partial class SimpleIntercept { //replace code: Console.WriteLine($"Method {item.typeAndMethodData.MethodName} from class {item.typeAndMethodData.TypeOfClass} Time: {item.StartedAtDate} state {item.State} "); //replace code:123456789!123456789!123456789!123456789!123456789!123456789!123456789!123456789!123456789!123456789!123456789!123456789!123456789!123456789!123456789!123456789!1234 [System.Runtime.CompilerServices.InterceptsLocation(@"D:\gth\RSCG_Examples\v2\rscg_examples\WIAD\src\WIADDemo\WIADDemo\Program.cs", 8, 13)] //[System.Diagnostics.DebuggerStepThrough()] public static void Intercept__WriteLine_1 ( string? value ) { System.Collections.Generic.Dictionary<string,string?> valValues = new (){ };//end valValues System.Collections.Generic.Dictionary<string,string?> stringValues = new() { { "value", value ?.ToString() } , };//end stringValues System.Collections.Generic.Dictionary<string,string?> expValues = new() { };//end exposeValues var x=WIADDemo.InterceptorMethodStatic .InterceptStaticMethodBefore( $$$"""" {"IsVoid":true,"Tag":"","MethodName":"WriteLine","TypeOfClass":"System.Console"} """" ,valValues , stringValues , expValues ) ; try{ System.Console.WriteLine(value); WIADDemo.InterceptorMethodStatic .InterceptMethodAfterWithoutResult(x); } catch(System.Exception ex){ WIADDemo.InterceptorMethodStatic .InterceptMethodException(x,ex); throw; } finally{ WIADDemo.InterceptorMethodStatic .InterceptMethodFinally(x); } } }//end class }//namespace RSCG_InterceptorTemplate
#pragma warning disable CS1591 #pragma warning disable CS9113 namespace System.Runtime.CompilerServices{ [AttributeUsage(AttributeTargets.Method,AllowMultiple =true)] file class InterceptsLocationAttribute(string filePath, int line, int character) : Attribute { } }//end namespace namespace RSCG_InterceptorTemplate{ static partial class SimpleIntercept { //replace code: Console.WriteLine($" =>Arguments: {item.ArgumentsAsString()}"); //replace code:123456789!123456789!123456789!123456789!123456789!123456789!12345678 [System.Runtime.CompilerServices.InterceptsLocation(@"D:\gth\RSCG_Examples\v2\rscg_examples\WIAD\src\WIADDemo\WIADDemo\Program.cs", 9, 13)] //[System.Diagnostics.DebuggerStepThrough()] public static void Intercept__WriteLine_2 ( string? value ) { System.Collections.Generic.Dictionary<string,string?> valValues = new (){ };//end valValues System.Collections.Generic.Dictionary<string,string?> stringValues = new() { { "value", value ?.ToString() } , };//end stringValues System.Collections.Generic.Dictionary<string,string?> expValues = new() { };//end exposeValues var x=WIADDemo.InterceptorMethodStatic .InterceptStaticMethodBefore( $$$"""" {"IsVoid":true,"Tag":"","MethodName":"WriteLine","TypeOfClass":"System.Console"} """" ,valValues , stringValues , expValues ) ; try{ System.Console.WriteLine(value); WIADDemo.InterceptorMethodStatic .InterceptMethodAfterWithoutResult(x); } catch(System.Exception ex){ WIADDemo.InterceptorMethodStatic .InterceptMethodException(x,ex); throw; } finally{ WIADDemo.InterceptorMethodStatic .InterceptMethodFinally(x); } } }//end class }//namespace RSCG_InterceptorTemplate
#pragma warning disable CS1591 #pragma warning disable CS9113 namespace System.Runtime.CompilerServices{ [AttributeUsage(AttributeTargets.Method,AllowMultiple =true)] file class InterceptsLocationAttribute(string filePath, int line, int character) : Attribute { } }//end namespace namespace RSCG_InterceptorTemplate{ static partial class SimpleIntercept { //replace code: Console.WriteLine($" =>Result: {item.Result}"); //replace code:123456789!123456789!123456789!123456789!123456789!123456 [System.Runtime.CompilerServices.InterceptsLocation(@"D:\gth\RSCG_Examples\v2\rscg_examples\WIAD\src\WIADDemo\WIADDemo\Program.cs", 12, 17)] //[System.Diagnostics.DebuggerStepThrough()] public static void Intercept__WriteLine_3 ( string? value ) { System.Collections.Generic.Dictionary<string,string?> valValues = new (){ };//end valValues System.Collections.Generic.Dictionary<string,string?> stringValues = new() { { "value", value ?.ToString() } , };//end stringValues System.Collections.Generic.Dictionary<string,string?> expValues = new() { };//end exposeValues var x=WIADDemo.InterceptorMethodStatic .InterceptStaticMethodBefore( $$$"""" {"IsVoid":true,"Tag":"","MethodName":"WriteLine","TypeOfClass":"System.Console"} """" ,valValues , stringValues , expValues ) ; try{ System.Console.WriteLine(value); WIADDemo.InterceptorMethodStatic .InterceptMethodAfterWithoutResult(x); } catch(System.Exception ex){ WIADDemo.InterceptorMethodStatic .InterceptMethodException(x,ex); throw; } finally{ WIADDemo.InterceptorMethodStatic .InterceptMethodFinally(x); } } }//end class }//namespace RSCG_InterceptorTemplate
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/WhatIAmDoing
Leave a Reply