Dotenv.Extensions.Microsoft.DependencyInjection 1.0.2

.NET Standard 2.0
dotnet add package Dotenv.Extensions.Microsoft.DependencyInjection --version 1.0.2
NuGet\Install-Package Dotenv.Extensions.Microsoft.DependencyInjection -Version 1.0.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Dotenv.Extensions.Microsoft.DependencyInjection" Version="1.0.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Dotenv.Extensions.Microsoft.DependencyInjection --version 1.0.2
#r "nuget: Dotenv.Extensions.Microsoft.DependencyInjection, 1.0.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Dotenv.Extensions.Microsoft.DependencyInjection as a Cake Addin
#addin nuget:?package=Dotenv.Extensions.Microsoft.DependencyInjection&version=1.0.2

// Install Dotenv.Extensions.Microsoft.DependencyInjection as a Cake Tool
#tool nuget:?package=Dotenv.Extensions.Microsoft.DependencyInjection&version=1.0.2

dotenv.core extensions for Microsoft.Extensions.DependencyInjection

dotenv.core dotenv.core Nuget-Badges PayPal-donate-button

This library adds extension methods for the Microsoft.Extensions.DependencyInjection package, which can be accessed through the IServiceCollection interface. So, this library is just a wrapper and behind the scenes what happens is that it uses the classes and methods from the dotenv.core project.

This project was created to add support for DI and can be used in ASP.NET Core projects.

Don't forget to visit the library website where you can find API documentation.

Advantages

The advantages of using this wrapper are:

  • No need to manually call the EnvLoader.Load method to set the environment variables from the .env file.
  • No need to manually call the EnvBinder.Bind method to map the keys of the .env file with the model properties.
  • No need to manually register the service as a singleton: IEnvReader or AppSettings.

Installation

If you're want to install the package from Visual Studio, you must open the project/solution in Visual Studio, and open the console using the Tools > NuGet Package Manager > Package Manager Console command and run the install command:

Install-Package Dotenv.Extensions.Microsoft.DependencyInjection

If you are making use of the dotnet CLI, then run the following in your terminal:

dotnet add package Dotenv.Extensions.Microsoft.DependencyInjection

Usage

You only need to invoke the AddDotEnv method to add the environment vars using a service:

// Example in ASP.NET Core 6+
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
IServiceCollection services = builder.Services;
services.AddDotEnv<AppSettings>();

var app = builder.Build();

The following line of code:

services.AddDotEnv<AppSettings>();

It does several things:

  • Invokes the Load method of the EnvLoader class to set the environment variables from a file named .env.
  • Invokes the Bind method of the EnvBinder class to map the keys of the .env file with the AppSettings properties.
  • Registers AppSettings as a singleton for the DI container.

Subsequently, the configuration class can be used in the controllers and the DI container will take care of injecting the instance when necessary:

public class ExampleController : ControllerBase
{
    private readonly AppSettings _settings;

    public ExampleController(AppSettings settings)
    {
        _settings = settings;
    }
}

Note: You can also take a look at the source code of the example project.

Load .env file based on environment

Use the AddCustomEnv method to adds the environment vars based on the environment (development, test, staging or production):

// Example in ASP.NET Core 6+
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
IServiceCollection services = builder.Services;
services.AddCustomEnv<AppSettings>();

var app = builder.Build();

The following line of code:

services.AddCustomEnv<AppSettings>();

It does several things:

  • Invokes the LoadEnv method of the EnvLoader class to set the environment variables from a .env file.

    This method will search for these .env files in the following order:

    • .env.[environment].local (has the highest priority)
    • .env.local
    • .env.[environment]
    • .env (has the lowest priority)

    The environment is specified by the actual environment variable DOTNET_ENV.

    It should be noted that the default environment will be development or dev if the environment is never specified with DOTNET_ENV.

  • Invokes the Bind method of the EnvBinder class to map the keys of the .env file with the AppSettings properties.

  • Registers AppSettings as a singleton for the DI container.

Done, use AppSettings on the controllers and let the container perform the dependency injection.

Contribution

Follow the steps below:

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request
Product Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows net7.0 net7.0-android net7.0-ios net7.0-maccatalyst net7.0-macos net7.0-tvos net7.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48 net481
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

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
1.0.2 135 1/21/2023
1.0.1 202 11/24/2022
1.0.0 197 11/20/2022