NexusAop is a powerful and flexible library for reflection and aspect-oriented programming (AOP) in .NET 5.0. This library enables developers to easily apply cross-cutting concerns to their applications by utilizing custom attributes. With NexusAop, you can interrupt method executions, perform specific actions, and retrieve results seamlessly.
Report Bug or Request Feature
·
Contect Me Via Mail
·
Contect Me Via Linkedin
- Aspect-Oriented Programming (AOP):
NexusAop empowers developers to embrace the principles of AOP by providing a straightforward mechanism for applying cross-cutting concerns using custom attributes. - Method Interruption:
Leverage the NextAsync() method to interrupt the execution of a method and perform specific actions before allowing the method to continue. This allows for dynamic and context-aware behavior in your applications. - Result Retrieval:
Utilize the ExecuteAndGetResultAsync() method to retrieve the result of the related method. This feature is particularly useful when you need to capture and manipulate the output of a method in a controlled manner. - Custom Attributes:
Easily create and apply custom attributes to your methods, enabling a clean and declarative way to define aspects. Custom attributes in NexusAop serve as the building blocks for weaving cross-cutting concerns into your application. - .NET 5.0 Compatibility:
NexusAop is designed to seamlessly integrate with .NET 5.0.
To start using NexusAop in your .NET 5.0 project, follow these simple steps:
- Install the Package:
dotnet add package NexusAop
2. Service Implementation:
serviceCollection.AddSingletonWithCustomAop<ITestService, TestService>();
- Apply Custom Attributes:
Decorate your methods with custom attributes to define the desired cross-cutting concerns.
public class TestService : ITestService
{
[CustomAspect]
public async Task<int> MyMethodAsync()
{
// Your method implementation
}
}
- Integrate Aspect-Oriented Behavior:
Use the provided methods such as NextAsync() and ExecuteAndGetResultAsync() within your custom aspects to influence the method execution flow.
public class CustomAspectAttribute : NexusAopAttribute
{
public override async Task ExecuteAsync(NexusAopContext context)
{
// Perform actions before the method execution
// Proceed with the execution of the target method
var result = await context.NextAsync();
// User-defined logic after the target method
// Get the result if you needed
var setResult= await context.ExecuteAndGetResultAsync();
return result;
}
}
- Build and Run:
Build your project, and NexusAop will seamlessly weave the specified aspects into your methods during runtime.
public class CacheMethodAttribute : NexusAopAttribute
{
public CacheMethodAttribute(
int ttlAsSecond)
{
Ttl = TimeSpan.FromSeconds(ttlAsSecond);
}
public CacheMethodAttribute()
{
Ttl = null;
}
public TimeSpan? Ttl { get; set; }
public override async Task ExecuteAsync(NexusAopContext context)
{
if (!CheckMethodCacheable(context.TargetMethod))
{
return;
}
var cacheKey = GetCacheKey(context.TargetMethod, context.TargetMethodsArgs);
var result = GetResult(cacheKey);
if (result != null)
{
context.Result= result;
return;
}
result = await context.ExecuteAndGetResultAsync();
await SetCacheAsync(context.TargetMethod, context.TargetMethodsArgs,result);
}
// ...
// see CacheMethodAttribute.cs in /Samples/Cache for other logics
// ...
}
Contributions are welcome! If you encounter any issues or have suggestions for improvements, please feel free to create an issue or submit a pull request.
This project is licensed under the BSD 3-Clause License.