Awesome Open Source
Awesome Open Source

Aspect Injector

Aspect Injector is an attribute-based framework for creating and injecting aspects into your .net assemblies.

Project Status

Nuget Nuget Pre GitHub (Pre-)Release Date GitHub last commit

Application Status Samples Status


> dotnet add package AspectInjector


  • Compile-time injection - works with Blazor and AOT
  • Injecting Before, After and Around (wrap) Methods, Constructors, Properties and Events
  • Injecting Interface implementations
  • Supports any project that can reference netstandard2.0 libraries, see here
  • Debugging support
  • Roslyn analyzers for your convenience (only c# currently)

Check out samples and docs


  • .NetCore runtime 2.1.6+ installed on your machine (your projects can be anything that can reference netstandard2.0)
  • (optional) For analyzers to work in VSCode, don't forget to enable "omnisharp.enableRoslynAnalyzers": true

Known Issues / Limitations

  • 'Edit and Continue' feature in VS is not working at the moment with .netcore3+ #138
  • Unsafe methods are not supported and are silently ignored.
  • Until Nuget v5 (with transient build feature) you need to refrecence AspectInjector into every project in your solution. Thus,
    if VisualStudio >= 2019 && CoreSDK >= 2.1.602
        no worries about references
        reference AspectInjector directly to projects where aspects are defined or used

Simple advice

Create an aspect with simple advice:

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	

Use it:

public void Calculate() 



$ dotnet run
Calling 'Calculate' method...

Simple mixin

Create an aspect with mixin:

public interface IInitializable
    void Init();

public class Initializable : IInitializable, Attribute
    public void Init()

Use it:

public class Target

var target = new Target() as IInitializable;


$ dotnet run

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
c-sharp (12,224
dotnet (882
dotnet-core (401
wrapper (228
blazor (101
aop (85
injection (76
mixins (38
aot (33
compile-time (25
attributes (20
advice (17