https://github.com/genryianchev/annotationservicebuilder.patterns
AnnotationServiceBuilder.Patterns is a library that provides support for implementing common design patterns in .NET applications using custom annotations.
https://github.com/genryianchev/annotationservicebuilder.patterns
annotations injection patterns visual-studio
Last synced: 4 months ago
JSON representation
AnnotationServiceBuilder.Patterns is a library that provides support for implementing common design patterns in .NET applications using custom annotations.
- Host: GitHub
- URL: https://github.com/genryianchev/annotationservicebuilder.patterns
- Owner: genryianchev
- License: mit
- Created: 2024-09-08T19:45:41.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-09T04:33:19.000Z (almost 2 years ago)
- Last Synced: 2025-08-22T14:53:39.267Z (10 months ago)
- Topics: annotations, injection, patterns, visual-studio
- Language: C#
- Homepage:
- Size: 17.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
#  AnnotationServiceBuilder.Patterns
**AnnotationServiceBuilder.Patterns** is a library that provides support for implementing common design patterns in .NET applications using custom annotations. This library is part of the [AnnotationServiceBuilder](https://github.com/genryianchev/AnnotationServiceBuilder) ecosystem and focuses on facilitating the use of design patterns such as Factory via annotation-based service registration.
## Key Features
- **Factory Pattern**: Easily register factories with the DI container using `[FactoryPattern]`, allowing for flexible object creation and dependency management.
- Simplifies codebase by removing the need for manual service registration.
- Integrates seamlessly with .NET dependency injection.
## Installation
To install **AnnotationServiceBuilder.Patterns**, use the following command:
```bash
dotnet add package AnnotationServiceBuilder.Patterns
```
Alternatively, you can install it through the NuGet Package Manager in Visual Studio.
## Usage
### Factory Pattern
The `FactoryPatternAttribute` allows for the annotation-based registration of factory classes. These classes should implement a factory interface, typically following the Factory Design Pattern, to create instances of specific types.
```csharp
[FactoryPattern(typeof(IMyFactory), ServiceLifetime.Scoped)]
public class MyFactory : IMyFactory
{
public MyObject Create()
{
return new MyObject();
}
}
```
- **`IMyFactory`**: The interface that the factory implements.
- **`ServiceLifetime.Scoped`**: The lifetime of the factory in the DI container (can also be `Singleton` or `Transient`).
```csharp
AnnotationDesignPatternRegistrar.AddFactoryPatternServices(builder.Services);
```
This will automatically scan your assembly for classes marked with the `[FactoryPattern]` attribute and register them in the DI container.
### Example: Registering Factory Services in `Program.cs`
In a minimal API setup (for .NET 6 and higher), here’s how you can initialize and register factory services:
```csharp
var builder = WebApplication.CreateBuilder(args);
// Initialize the assembly with all patterns
AnnotationDesignPatternRegistrar.Initialize(Assembly.GetExecutingAssembly());
// Register all factory pattern services
AnnotationDesignPatternRegistrar.AddFactoryPatternServices(builder.Services);
var app = builder.Build();
// Add your middlewares and endpoints here
app.Run();
```
This will ensure that all factory services marked with `[FactoryPattern]` are properly registered in the DI container.
### Example: Registering Factory Services in `Startup.cs`
If you are using a traditional `Startup.cs` class (for example, in an ASP.NET Core MVC app), here's how to register factory services:
```csharp
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Initialize the assembly with all patterns
AnnotationDesignPatternRegistrar.Initialize(Assembly.GetExecutingAssembly());
// Register all factory pattern services
services.AddFactoryPatternServices();
}
}
```
## Contributing
If you'd like to contribute to **AnnotationServiceBuilder.Patterns**, feel free to submit a pull request or open an issue on the [GitHub repository](https://github.com/genryianchev/AnnotationServiceBuilder).
---
### License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.