Comments (5)
Sure, that sounds great :)
from dotnet-env.
You can create the pr whenever, I will close this issue now
from dotnet-env.
Hey @rogusdev
I privately created the extension but it brings Microsoft.Extensions.Configuration
as a dependency. Only after I opened the issue did I notice that the dependencies of dotnet-env are very lightweight.
Sorry for wasting your time and thank you for your work on dotnet-env.
If you would be open to add the dependency I will submit the PR.
from dotnet-env.
Yeah, I'd rather not have a new dependency for that. Tho, if your extension method is short, you could post it on this thread to help others who have the same desire :)
from dotnet-env.
Short if not for all the boiler plate. It was inspired by aspnet code so it needs to comply with the Apache license as in the header:
//
// Licensed under the Apache License, Version 2.0.
// See https://github.com/aspnet/Configuration/blob/master/LICENSE.txt for license information.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using DotNetEnv;
using Microsoft.Extensions.Configuration;
namespace ProgramExtensions {
public static class EnvFileExtension {
public static IConfigurationBuilder LoadEnvironmentVariablesFromFile(this IConfigurationBuilder builder,
string path, string prefix, LoadOptions options) {
return builder.Add(new EnvFileConfigurationSource(path, prefix, options));
}
}
public class EnvFileConfigurationSource : IConfigurationSource {
private readonly LoadOptions _load_options;
private readonly string _path;
private readonly string _prefix;
public EnvFileConfigurationSource(string path, string prefix, LoadOptions load_options) {
_load_options = load_options;
_path = path;
_prefix = prefix;
}
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new EnvFileConfigurationProvider(_path, _prefix, _load_options);
}
}
public class EnvFileConfigurationProvider : ConfigurationProvider{
private readonly LoadOptions _options;
private readonly string _path;
private readonly string _prefix;
public EnvFileConfigurationProvider(string path, string prefix, LoadOptions options) {
_options = options;
_path = path;
_prefix = prefix;
}
public override void Load() {
var env = Env.Load(_path, _options).ToDictionary();
var data = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
var filtered_variables = env
.SelectMany(NormalizeKey)
.Where(entry => ((string)entry.Key).StartsWith(_prefix, StringComparison.OrdinalIgnoreCase));
foreach (var envVariable in filtered_variables)
{
var key = ((string)envVariable.Key)[_prefix.Length..];
data[key] = (string)envVariable.Value;
}
Data = data;
}
private static IEnumerable<DictionaryEntry> NormalizeKey(KeyValuePair<string, string> e) {
var (key, value) = e;
yield return new DictionaryEntry() {
Key = NormalizeKey(key),
Value = value
};
}
private static string NormalizeKey(string key)
{
return key.Replace("__", ConfigurationPath.KeyDelimiter);
}
}
}
from dotnet-env.
Related Issues (20)
- Not compatible with Kubernetes .env HOT 3
- Failure to parse on $ HOT 2
- Not installing on .NET 4.5.2 HOT 3
- Is there support for hierarchical settings? HOT 2
- how to use .env file in production? HOT 1
- Fails to parse when environment file has dash (-) HOT 9
- Not Able to read env variables for project type .NET Framework 4.7.2 HOT 2
- Make change to README file HOT 7
- Env file not loading HOT 3
- Vulnerability issue v2.3.0 HOT 1
- Environment variables for .NET Framework 4.7.2 set on a run basis rather than on a project root folder basis HOT 7
- Suggestion: Defaults Are Unexpected
- Add readme to nuget package HOT 1
- 2.4.0 Doesn't Work - Fails to Load .env HOT 19
- Encryption HOT 1
- Transitive Dependency System.Net.Http 4.3.0 contains vulnerabilities according to Checkmarx HOT 3
- Denial of Service (DoS) - v2.5.0 HOT 1
- Loading Configuration from File - Parsed it to an object HOT 3
- Interpolation stops working with `SetEnvVars == false` HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dotnet-env.