CustomEnvironmentConfig 1.3.0
System.Text.Json had a serious vulnerability that is addressed in 2.0.0 or higher.
See the version list below for details.
dotnet add package CustomEnvironmentConfig --version 1.3.0
NuGet\Install-Package CustomEnvironmentConfig -Version 1.3.0
<PackageReference Include="CustomEnvironmentConfig" Version="1.3.0" />
paket add CustomEnvironmentConfig --version 1.3.0
#r "nuget: CustomEnvironmentConfig, 1.3.0"
// Install CustomEnvironmentConfig as a Cake Addin #addin nuget:?package=CustomEnvironmentConfig&version=1.3.0 // Install CustomEnvironmentConfig as a Cake Tool #tool nuget:?package=CustomEnvironmentConfig&version=1.3.0
dotnetcore-custom-env
Enables binding environment variables and/or environment files to classes.
Example
(.env [environment variables])
MyConfigItem=Test Value
Subclass_MyConfigSubItem=Test Subitem Value
(MyConfiguration.cs)
public class MyConfiguration
{
public string MyConfigItem { get; set; }
public MyConfigSubClass Subclass { get; set; }
}
public class MyConfigSubClass
{
public string MyConfigSubItem { get; set; }
}
(Program.cs)
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseEnvironmentConfiguration<MyConfiguration>()
.....
(Startup.cs)
public class Startup
{
private readonly MyConfiguration _configuration;
public Startup(MyConfiguration configuration)
{
_configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
...
Console.WriteLine(_configuration.MyConfigItem);
Console.WriteLine(_configuration.Subclass.MyConfigSubItem);
...
}
}
If you want, you can re-map the name of the items using [ConfigItem]: (Do note, [ConfigItem] is not required and only needed if you want to set the requirement policy of a property or change the name of the environment variable)
public class MyConfiguration
{
[ConfigItem("MyItem")]
public bool Item { get; set; }
// OR
[ConfigItem(Name = "MyOtherItem")]
public int OtherItem { get; set; }
[ConfigItem("Test")
public SubConfiguration MySubClass { get; set; }
}
public class SubConfiguration
{
[ConfigItem]
public bool SubItem { get; set; }
}
If you want to ignore parsing certain properties in a class, you can use [IgnoreConfigItem]:
public class MyConfiguration
{
[ConfigItem("MyItem")]
public bool Item { get; set; }
public int OtherItem { get; set; }
[IgnoreConfigItem]
public SubConfiguration MySubClass { get; set; }
}
The environment variables for this would look like as follows:
MyItem=Value
MyOtherItem=Value
Test_SubItem=Value
You can also set if the item is required to be set in the environment or not. By default, items are required.
public class MyConfiguration
{
[ConfigItem(Required = false)]
public bool NotRequiredItem { get; set; }
// OR
[ConfigItem(Name = "MyOtherItem", Required = true)]
public int OtherItem { get; set; }
}
If you want to specify a default value for an item if it's not required:
public class MyConfiguration
{
[ConfigItem(Required = false, Default = true)]
public bool NotRequiredItem { get; set; }
// OR
[ConfigItem(Required = false, Default = 123)]
public int OtherItem { get; set; }
}
Conversions across types are supported for defaults, for instance:
(string)"123" => (int)123
(string)"true" => (bool)True
(string)"false" => (bool)False
(int)1 => (bool)True
(int)0 => (bool)False
...etc
From an Env File:
Most of this applies from above, except instead your IWebHostBuilder would look like:
// Program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseEnvironmentConfiguration<MyConfiguration>(fileName: "filename.env", configurationTypeEnum: ConfigurationTypeEnum.PreferEnvironment)
.....
Non-DI:
To parse environment variables directly:
public void MyFunction()
{
var output = ConfigurationParser.Parse<MyClass>();
// Access your class via output variable
}
To parse from an environment file:
public void MyFunction()
{
var output = ConfigurationParser.Parse<MyClass>(fileName: "file.env");
// Access your class via output variable
}
Preferences
You can choose one of the following preferences:
- Prefer Environment Over File
- Prefer File Over Environment
- Use Environment Only
- Use File Only
The default functionality is Prefer Environment over File.
To use this functionality, there's two ways, both DI and non-DI:
DI
// Program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseEnvironmentConfiguration<MyConfiguration>(fileName: "filename.env", configurationTypeEnum: ConfigurationTypeEnum.PreferEnvironment)
.....
Non-DI
public void MyFunction()
{
var output = ConfigurationParser.Parse<MyClass>(fileName: "file.env", configurationTypeEnum: ConfigurationTypeEnum.PreferEnvironment);
.....
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.AspNetCore.Hosting.Abstractions (>= 2.2.0)
- Microsoft.Extensions.DependencyInjection (>= 2.2.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 2.2.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 | |
---|---|---|---|
8.0.0 | 314 | 9/24/2024 | |
2.1.0 | 82 | 9/24/2024 | |
2.0.1 | 4,094 | 7/24/2023 | |
2.0.0 | 239 | 7/24/2023 | |
1.7.1 | 3,567 | 3/1/2022 | |
1.7.0 | 521 | 3/1/2022 | |
1.6.3 | 6,868 | 10/4/2021 | |
1.6.2 | 471 | 10/4/2021 | |
1.6.1 | 398 | 10/4/2021 | |
1.6.0 | 1,952 | 1/11/2021 | |
1.5.0 | 818 | 11/18/2020 | |
1.4.1 | 3,175 | 7/9/2020 | |
1.4.0 | 586 | 6/29/2020 | |
1.3.0 | 1,744 | 5/5/2020 | |
1.2.3 | 1,904 | 6/18/2019 | |
1.2.2 | 1,008 | 4/30/2019 | |
1.2.1 | 687 | 4/16/2019 | |
1.2.0 | 668 | 4/10/2019 | |
1.1.2 | 768 | 3/6/2019 | |
1.1.1 | 655 | 3/6/2019 | |
1.1.0 | 650 | 3/6/2019 | |
1.0.1 | 907 | 2/19/2019 | |
1.0.0 | 764 | 2/19/2019 |