AutoConstructor 1.0.0
See the version list below for details.
dotnet add package AutoConstructor --version 1.0.0
NuGet\Install-Package AutoConstructor -Version 1.0.0
<PackageReference Include="AutoConstructor" Version="1.0.0" />
paket add AutoConstructor --version 1.0.0
#r "nuget: AutoConstructor, 1.0.0"
// Install AutoConstructor as a Cake Addin #addin nuget:?package=AutoConstructor&version=1.0.0 // Install AutoConstructor as a Cake Tool #tool nuget:?package=AutoConstructor&version=1.0.0
AutoConstructor
C# source generator that generates a constructor from readonly fields in a class.
- Visual Studio 16.9+ is needed
- .NET SDK 5.0.300+ is needed
How to use
For any class where the generator will be used:
- Mark the class as
partial
- Use
AutoConstructorAttribute
on the class
By default, all private readonly
without initialization will be used. The will be injected with the same name without any leading _
.
Fields marked with AutoConstructorIgnoreAttribute
will be ignored.
Use AutoConstructorInjectAttribute
to customize the behavior, usualy when the injected parameter and the fields
do not have the same type. It takes three parameters:
Initializer
: a string that will be used to initialize the field (by examplemyService.GetData()
)ParameterName
: the name of the parameter to used in the constructor (by examplemyService
)InjectedType
: the type of the parameter to used in the constructor (by exampleIMyService
)
When using AutoConstructorInjectAttribute
, the parameter name can be shared across multiple fields,
and even use a parameter from another field not annotated with AutoConstructorInjectAttribute
, but type must match.
Sample
The following code
[AutoConstructor]
partial class Test
{
private readonly string _name;
// Won't be injected
private readonly Uri _uri = new Uri("/non-modified", UriKind.Relative);
// Won't be injected
[AutoConstructorIgnore]
private readonly DateTime _dateNotTaken;
// Won't be injected
private int? _toto;
// Support for nullables
private readonly DateTime? _date;
// Support for generics
private readonly List<DateTime> _items;
// Inject with custom initializer
[AutoConstructorInject("guid.ToString()", "guid", typeof(Guid))]
private readonly string _guidString;
// Use existing parameter defined with AutoConstructorInject
[AutoConstructorInject("guid.ToString().Length", "guid", typeof(Guid))]
private readonly int _guidLength;
// Use existing parameter from a basic injection
[AutoConstructorInject("name.ToUpper()", "name", typeof(string))]
private readonly string _nameShared;
}
will generate
public Test(string name, System.DateTime? date, System.Collections.Generic.List<System.DateTime> items, System.Guid guid)
{
this._name = name ?? throw new System.ArgumentNullException(nameof(name));
this._date = date ?? throw new System.ArgumentNullException(nameof(date));
this._items = items ?? throw new System.ArgumentNullException(nameof(items));
this._guidString = guid.ToString() ?? throw new System.ArgumentNullException(nameof(guid));
this._guidLength = guid.ToString().Length;
this._nameShared = name.ToUpper() ?? throw new System.ArgumentNullException(nameof(name));
}
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- Microsoft.CodeAnalysis.CSharp.Workspaces (>= 3.10.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
5.6.0 | 4,185 | 9/22/2024 |
5.5.0 | 4,847 | 6/26/2024 |
5.5.0-beta.1 | 60 | 6/24/2024 |
5.4.1 | 486 | 6/22/2024 |
5.4.0 | 3,914 | 5/23/2024 |
5.3.0 | 5,395 | 3/16/2024 |
5.3.0-beta.2 | 67 | 3/15/2024 |
5.3.0-beta.1 | 98 | 3/12/2024 |
5.2.1 | 15,619 | 3/4/2024 |
5.2.0 | 4,705 | 12/19/2023 |
5.1.0 | 7,597 | 11/23/2023 |
5.0.1 | 276 | 11/22/2023 |
5.0.0 | 6,158 | 11/7/2023 |
5.0.0-beta.2 | 79 | 11/6/2023 |
5.0.0-beta.1 | 95 | 11/2/2023 |
4.1.1 | 9,349 | 7/18/2023 |
4.1.0 | 4,095 | 7/8/2023 |
4.0.3 | 7,223 | 4/24/2023 |
4.0.2 | 2,546 | 4/19/2023 |
4.0.1 | 1,592 | 3/29/2023 |
4.0.0 | 353 | 3/27/2023 |
3.2.5 | 5,600 | 10/15/2022 |
3.2.4 | 380 | 10/7/2022 |
3.2.3 | 695 | 6/28/2022 |
3.2.2 | 443 | 6/27/2022 |
3.2.1 | 468 | 6/11/2022 |
3.2.0 | 457 | 5/20/2022 |
3.1.1 | 455 | 5/14/2022 |
3.0.0 | 457 | 4/1/2022 |
3.0.0-beta.2 | 149 | 3/9/2022 |
3.0.0-beta.1 | 995 | 2/9/2022 |
2.3.0 | 530 | 1/27/2022 |
2.2.0 | 455 | 1/22/2022 |
2.1.0 | 442 | 1/21/2022 |
2.0.2 | 347 | 11/11/2021 |
1.3.0 | 455 | 9/21/2021 |
1.2.1 | 356 | 8/28/2021 |
1.2.0 | 358 | 8/28/2021 |
1.1.0 | 347 | 8/26/2021 |
1.0.2 | 430 | 8/2/2021 |
1.0.1 | 477 | 7/24/2021 |
1.0.0 | 433 | 7/23/2021 |