AspectInjector 2.6.1
Aspect Injector
Aspect Injector is an attribute-based framework for creating and injecting aspects into your .net assemblies.
Project Status
Download
> dotnet add package AspectInjector
Features
- 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)
Requirements
- .NetCore runtime 2.1.6+ installed on your machine (your projects can be anything that can reference netstandard2.0)
- (semi-optional) Nuget 5.0+ for transient build feature. All modern versions of VS and dotnetsdk have it. (If you still use project.json for some reason - make sure you add AspectInjector to all projects in the solution)
- (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.
Simple advice
Create an aspect with simple advice:
[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
}
}
Use it:
[LogCall]
public void Calculate()
{
Console.WriteLine("Calculated");
}
Calculate();
Result:
$ dotnet run
Calling 'Calculate' method...
Calculated
Simple mixin
Create an aspect with mixin:
public interface IInitializable
{
void Init();
}
[Aspect(Scope.PerInstance)]
[Injection(typeof(Initializable))]
[Mixin(typeof(IInitializable))]
public class Initializable : IInitializable, Attribute
{
public void Init()
{
Console.WriteLine("Initialized!");
}
}
Use it:
[Initializable]
public class Target
{
}
var target = new Target() as IInitializable;
target.Init();
Result:
$ dotnet run
Initialized!
Showing the top 20 packages that depend on AspectInjector.
| Packages | Downloads |
|---|---|
|
Allure.Net.Commons
Provides common facilities to build Allure adapters for .NET test frameworks.
|
2 |
|
Allure.Net.Commons
Provides common facilities to build Allure adapters for .NET test frameworks.
|
3 |
|
Allure.Net.Commons
Provides common facilities to build allure integrations for .NET test frameworks
|
2 |
.NET Standard 2.0
- No dependencies.
| Version | Downloads | Last updated |
|---|---|---|
| 2.9.0 | 2 | 11.05.2026 |
| 2.9.0-pre4 | 2 | 11.05.2026 |
| 2.9.0-pre3 | 2 | 11.05.2026 |
| 2.9.0-pre2 | 2 | 11.05.2026 |
| 2.9.0-pre1 | 2 | 11.05.2026 |
| 2.8.3-pre3 | 2 | 11.05.2026 |
| 2.8.3-pre2 | 2 | 11.05.2026 |
| 2.8.3-pre1 | 2 | 11.05.2026 |
| 2.8.2 | 2 | 11.05.2026 |
| 2.8.2-pre3 | 2 | 11.05.2026 |
| 2.8.2-pre2 | 2 | 11.05.2026 |
| 2.8.2-pre1 | 2 | 11.05.2026 |
| 2.8.1 | 3 | 11.05.2026 |
| 2.8.0 | 2 | 11.05.2026 |
| 2.7.4 | 2 | 11.05.2026 |
| 2.7.3 | 2 | 11.05.2026 |
| 2.7.2 | 2 | 11.05.2026 |
| 2.6.1 | 2 | 11.05.2026 |
| 2.6.0 | 2 | 11.05.2026 |
| 2.5.0 | 3 | 11.05.2026 |
| 2.4.4 | 2 | 11.05.2026 |
| 2.4.3 | 2 | 11.05.2026 |
| 2.4.1 | 2 | 11.05.2026 |
| 2.4.0 | 2 | 11.05.2026 |
| 2.3.1 | 2 | 11.05.2026 |
| 2.3.0 | 2 | 11.05.2026 |
| 2.2.8 | 2 | 11.05.2026 |
| 2.2.5 | 2 | 11.05.2026 |
| 2.2.4 | 2 | 11.05.2026 |
| 2.2.1 | 3 | 11.05.2026 |
| 2.1.1 | 2 | 11.05.2026 |
| 2.1.0 | 2 | 11.05.2026 |
| 2.0.6 | 3 | 11.05.2026 |
| 2.0.2 | 2 | 11.05.2026 |
| 1.0.2 | 2 | 11.05.2026 |
| 1.0.1 | 2 | 11.05.2026 |
| 0.9.44 | 2 | 11.05.2026 |
| 0.9.43 | 2 | 11.05.2026 |
| 0.9.42 | 2 | 11.05.2026 |