Attributes-based compile-time AOP framework. Cross-cutting concerns made easy! Just apply your attributes where you need them and everything automagicaly works! No xml configs! No wierd reflection hacks! No runtime emit! Works with AOT and Blazor! See release notes for this version here: https://github.com/pamidur/aspect-injector/releases/tag/2.9.0
> dotnet add package AspectInjector"omnisharp.enableRoslynAnalyzers": true[Aspect(Scope.Global)]
[Injection(typeof(LogCall))]
public class LogCall : Attribute
{
[Advice(Kind.Before)] // you can have also After (async-aware), and Around(Wrap/Instead) kinds
public void LogEnter([Argument(Source.Name)] string name)
{
Console.WriteLine($"Calling '{name}' method..."); //you can debug it
}
}[LogCall]
public void Calculate()
{
Console.WriteLine("Calculated");
}
Calculate();$ dotnet run
Calling 'Calculate' method...
Calculatedpublic interface IInitializable
{
void Init();
}
[Aspect(Scope.PerInstance)]
[Injection(typeof(Initializable))]
[Mixin(typeof(IInitializable))]
public class Initializable : IInitializable, Attribute
{
public void Init()
{
Console.WriteLine("Initialized!");
}
}[Initializable]
public class Target
{
}
var target = new Target() as IInitializable;
target.Init();$ dotnet run
Initialized!