Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/SzymonHalucha/Minerals.AutoInterfaces
Package for automatic interface generation using an incremental source generator
https://github.com/SzymonHalucha/Minerals.AutoInterfaces
csharp csharp-sourcegenerator dotnet interfaces mocking roslyn
Last synced: 2 days ago
JSON representation
Package for automatic interface generation using an incremental source generator
- Host: GitHub
- URL: https://github.com/SzymonHalucha/Minerals.AutoInterfaces
- Owner: SzymonHalucha
- License: mit
- Created: 2024-03-12T09:31:05.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-05-16T09:18:58.000Z (6 months ago)
- Last Synced: 2024-10-11T17:23:22.477Z (about 1 month ago)
- Topics: csharp, csharp-sourcegenerator, dotnet, interfaces, mocking, roslyn
- Language: C#
- Homepage:
- Size: 93.8 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- RSCG_Examples - https://github.com/SzymonHalucha/Minerals.AutoInterfaces
README
# Minerals.AutoInterfaces
![GitHub License](https://img.shields.io/github/license/SzymonHalucha/Minerals.AutoInterfaces?style=for-the-badge)
![NuGet Version](https://img.shields.io/nuget/v/Minerals.AutoInterfaces?style=for-the-badge)
![NuGet Downloads](https://img.shields.io/nuget/dt/Minerals.AutoInterfaces?style=for-the-badge)[Package on nuget.org](https://www.nuget.org/packages/Minerals.AutoInterfaces/)
This NuGet package provides a functionality to automatically generate interfaces for C# classes with a single attribute. This simplifies the creation of interfaces for classes with clearly defined public members, without having to manually write interface code.
## Features
- **Automatic interface generation:** Saves time and reduces the risk of errors when creating interfaces for classes.
- **Support for generic methods and constraints:** Allows for generating interfaces for complex classes with generic methods.
- **Support for custom getters and setters:** Generates interfaces for properties with custom getter and setter implementations.
- **Customizable interface name:** Allows you to name the interface according to naming conventions or user preferences.
- **Compatible with .NET Standard 2.0 and C# 7.3+:** Works on a wide range of platforms and development environments.## Installation
Add the Minerals.AutoInterfaces nuget package to your C# project using the following methods:
### 1. Project file definition
```xml
```
### 2. dotnet command
```bat
dotnet add package Minerals.AutoInterfaces
```## Usage
To use the package, add the ```[GenerateInterface]``` attribute to the selected class.
```csharp
namespace Examples
{
[Minerals.AutoInterfaces.GenerateInterface]
public class ExampleClass
{
public int Property1 { get; set; } = 1;
public int Property2 { get; private set; } = 2;
public int Property3
{
get { return _field1; }
set { _field1 = value; }
}private int _field1 = 0;
public int Method1(int arg0, int arg1)
{
return arg0 + arg1;
}public void Method2(T arg0) where T : class, new()
{
return $"{arg0}";
}protected void Method3() { }
}
}
```The code above will generate the ```IExampleClass.g.cs``` file with the ```IExampleClass``` interface.
```csharp
namespace Examples
{
[global::System.Runtime.CompilerServices.CompilerGenerated]
public interface IExampleClass
{
int Property1 { get; set; }
int Property2 { get; }
int Property3 { get; set; }
int Method1(int arg0, int arg1);
string Method2(T arg0) where T : class, new();
}
}
```### Package supports custom interface names
```csharp
namespace Examples
{
[Minerals.AutoInterfaces.GenerateInterface("ExampleInterface")]
public class ExampleClass
{
public int Property1 { get; protected set; } = 1;
}
}
```The code above will generate the ```ExampleInterface.g.cs``` file with the ```ExampleInterface``` interface.
```csharp
namespace Examples
{
[global::System.Runtime.CompilerServices.CompilerGenerated]
public interface ExampleInterface
{
int Property1 { get; }
}
}
```## Versioning
We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [branches on this repository](https://github.com/SzymonHalucha/Minerals.AutoInterfaces/branches).
## Authors
- **Szymon Hałucha** - Maintainer
See also the list of [contributors](https://github.com/SzymonHalucha/Minerals.AutoInterfaces/contributors) who participated in this project.
## License
This project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details.