AspectInjector 2.7.3-pre1
See the version list below for details.
Install-Package AspectInjector -Version 2.7.3-pre1
dotnet add package AspectInjector --version 2.7.3-pre1
<PackageReference Include="AspectInjector" Version="2.7.3-pre1" />
paket add AspectInjector --version 2.7.3-pre1
#r "nuget: AspectInjector, 2.7.3-pre1"
// Install AspectInjector as a Cake Addin
#addin nuget:?package=AspectInjector&version=2.7.3-pre1&prerelease
// Install AspectInjector as a Cake Tool
#tool nuget:?package=AspectInjector&version=2.7.3-pre1&prerelease
<h3><span style="color: #ff0000;"><strong>I have never asked for any donations, but today, I ask you, please, consider donating Ukrainian Army.<br /></strong></span></h3> <h3><span style="color: #ff0000;"><strong>You can find official ways to do it <a href="https://bank.gov.ua/en/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi">here</a> or you can donate to the biggest charity organization <a href="https://www.comebackalive.in.ua/">here</a></strong></span></h3> <h3><span style="color: #ff0000;"><strong>People need to be alive to create open source projects!</strong></span></h3>
<img src="https://raw.githubusercontent.com/pamidur/aspect-injector/master/package.png" width="48" align="right"/>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
- (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
- 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!
Product | Versions |
---|---|
.NET | net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows |
.NET Core | netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 |
.NET Standard | netstandard2.0 netstandard2.1 |
.NET Framework | net461 net462 net463 net47 net471 net472 net48 |
MonoAndroid | monoandroid |
MonoMac | monomac |
MonoTouch | monotouch |
Tizen | tizen40 tizen60 |
Xamarin.iOS | xamarinios |
Xamarin.Mac | xamarinmac |
Xamarin.TVOS | xamarintvos |
Xamarin.WatchOS | xamarinwatchos |
-
.NETStandard 2.0
- No dependencies.
NuGet packages (32)
Showing the top 5 NuGet packages that depend on AspectInjector:
Package | Downloads |
---|---|
NUnit.Allure
NUnit attributes extenstions for Allure |
|
NUnit.Allure.Steps
Steps Attribute for NUnit.Allure |
|
NUnit.OneTimeSetup.DreddLogs
Helper library for NUnit that allows you to show all the logs that happened during test fixture setup (OneTimeSetup) |
|
Aspects.Cache
This package provides cache aspect for your methods. Put [MemoryCache(seconds)] attribure on your methods. And enjoy hassle-free memory cache for your methods. Or implement your own cache mechanics by inheriting CacheAttribute class. Powered by AspectInjector. |
|
Flashcom.Util
常用调用类 |
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on AspectInjector:
Repository | Stars |
---|---|
enkodellc/blazorboilerplate
Blazor Boilerplate / Starter Template with MudBlazor
|
|
pamidur/aspect-injector
AOP framework for .NET (c#, vb, etc)
|
Version | Downloads | Last updated | |
---|---|---|---|
2.7.3 | 1,444 | 6/20/2022 | |
2.7.3-pre1 | 159 | 4/7/2022 | |
2.7.2 | 71,311 | 1/24/2022 | |
2.7.1 | 454 | 1/22/2022 | |
2.6.1 | 20,489 | 12/7/2021 | |
2.6.0 | 184,661 | 8/23/2021 | |
2.5.0 | 181,210 | 3/8/2021 | |
2.4.4 | 11,267 | 1/28/2021 | |
2.4.3 | 3,570 | 12/30/2020 | |
2.4.1 | 101,051 | 7/31/2020 | |
2.4.0 | 25,542 | 6/17/2020 | |
2.3.1 | 85,837 | 2/18/2020 | |
2.3.0 | 17,472 | 2/10/2020 | |
2.2.8 | 6,206 | 1/19/2020 | |
2.2.5 | 8,777 | 10/14/2019 | |
2.2.4 | 5,130 | 10/11/2019 | |
2.2.1 | 32,366 | 6/16/2019 | |
2.1.1 | 24,452 | 5/3/2019 | |
2.1.0 | 2,960 | 4/17/2019 | |
2.0.6 | 2,236 | 2/11/2019 | |
2.0.2 | 3,826 | 1/3/2019 | |
1.0.2 | 2,774 | 4/26/2019 | |
1.0.1 | 15,267 | 4/2/2018 | |
0.9.44 | 3,017 | 8/5/2015 | |
0.9.43 | 1,412 | 8/4/2015 | |
0.9.42 | 1,484 | 8/4/2015 |