Skip to content

Commit f540b8f

Browse files
committed
Initial commit
0 parents  commit f540b8f

File tree

10 files changed

+987
-0
lines changed

10 files changed

+987
-0
lines changed

.gitignore

Lines changed: 288 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,288 @@
1+
## Ignore Visual Studio temporary files, build results, and
2+
## files generated by popular Visual Studio add-ons.
3+
##
4+
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5+
6+
# User-specific files
7+
*.suo
8+
*.user
9+
*.userosscache
10+
*.sln.docstates
11+
12+
# User-specific files (MonoDevelop/Xamarin Studio)
13+
*.userprefs
14+
15+
# Build results
16+
[Dd]ebug/
17+
[Dd]ebugPublic/
18+
[Rr]elease/
19+
[Rr]eleases/
20+
x64/
21+
x86/
22+
bld/
23+
[Bb]in/
24+
[Oo]bj/
25+
[Ll]og/
26+
27+
# Visual Studio 2015 cache/options directory
28+
.vs/
29+
# Uncomment if you have tasks that create the project's static files in wwwroot
30+
#wwwroot/
31+
32+
# MSTest test Results
33+
[Tt]est[Rr]esult*/
34+
[Bb]uild[Ll]og.*
35+
36+
# NUNIT
37+
*.VisualState.xml
38+
TestResult.xml
39+
40+
# Build Results of an ATL Project
41+
[Dd]ebugPS/
42+
[Rr]eleasePS/
43+
dlldata.c
44+
45+
# .NET Core
46+
project.lock.json
47+
project.fragment.lock.json
48+
artifacts/
49+
**/Properties/launchSettings.json
50+
51+
*_i.c
52+
*_p.c
53+
*_i.h
54+
*.ilk
55+
*.meta
56+
*.obj
57+
*.pch
58+
*.pdb
59+
*.pgc
60+
*.pgd
61+
*.rsp
62+
*.sbr
63+
*.tlb
64+
*.tli
65+
*.tlh
66+
*.tmp
67+
*.tmp_proj
68+
*.log
69+
*.vspscc
70+
*.vssscc
71+
.builds
72+
*.pidb
73+
*.svclog
74+
*.scc
75+
76+
# Chutzpah Test files
77+
_Chutzpah*
78+
79+
# Visual C++ cache files
80+
ipch/
81+
*.aps
82+
*.ncb
83+
*.opendb
84+
*.opensdf
85+
*.sdf
86+
*.cachefile
87+
*.VC.db
88+
*.VC.VC.opendb
89+
90+
# Visual Studio profiler
91+
*.psess
92+
*.vsp
93+
*.vspx
94+
*.sap
95+
96+
# TFS 2012 Local Workspace
97+
$tf/
98+
99+
# Guidance Automation Toolkit
100+
*.gpState
101+
102+
# ReSharper is a .NET coding add-in
103+
_ReSharper*/
104+
*.[Rr]e[Ss]harper
105+
*.DotSettings.user
106+
107+
# JustCode is a .NET coding add-in
108+
.JustCode
109+
110+
# TeamCity is a build add-in
111+
_TeamCity*
112+
113+
# DotCover is a Code Coverage Tool
114+
*.dotCover
115+
116+
# Visual Studio code coverage results
117+
*.coverage
118+
*.coveragexml
119+
120+
# NCrunch
121+
_NCrunch_*
122+
.*crunch*.local.xml
123+
nCrunchTemp_*
124+
125+
# MightyMoose
126+
*.mm.*
127+
AutoTest.Net/
128+
129+
# Web workbench (sass)
130+
.sass-cache/
131+
132+
# Installshield output folder
133+
[Ee]xpress/
134+
135+
# DocProject is a documentation generator add-in
136+
DocProject/buildhelp/
137+
DocProject/Help/*.HxT
138+
DocProject/Help/*.HxC
139+
DocProject/Help/*.hhc
140+
DocProject/Help/*.hhk
141+
DocProject/Help/*.hhp
142+
DocProject/Help/Html2
143+
DocProject/Help/html
144+
145+
# Click-Once directory
146+
publish/
147+
148+
# Publish Web Output
149+
*.[Pp]ublish.xml
150+
*.azurePubxml
151+
# TODO: Comment the next line if you want to checkin your web deploy settings
152+
# but database connection strings (with potential passwords) will be unencrypted
153+
*.pubxml
154+
*.publishproj
155+
156+
# Microsoft Azure Web App publish settings. Comment the next line if you want to
157+
# checkin your Azure Web App publish settings, but sensitive information contained
158+
# in these scripts will be unencrypted
159+
PublishScripts/
160+
161+
# NuGet Packages
162+
*.nupkg
163+
# The packages folder can be ignored because of Package Restore
164+
**/packages/*
165+
# except build/, which is used as an MSBuild target.
166+
!**/packages/build/
167+
# Uncomment if necessary however generally it will be regenerated when needed
168+
#!**/packages/repositories.config
169+
# NuGet v3's project.json files produces more ignorable files
170+
*.nuget.props
171+
*.nuget.targets
172+
173+
# Microsoft Azure Build Output
174+
csx/
175+
*.build.csdef
176+
177+
# Microsoft Azure Emulator
178+
ecf/
179+
rcf/
180+
181+
# Windows Store app package directories and files
182+
AppPackages/
183+
BundleArtifacts/
184+
Package.StoreAssociation.xml
185+
_pkginfo.txt
186+
187+
# Visual Studio cache files
188+
# files ending in .cache can be ignored
189+
*.[Cc]ache
190+
# but keep track of directories ending in .cache
191+
!*.[Cc]ache/
192+
193+
# Others
194+
ClientBin/
195+
~$*
196+
*~
197+
*.dbmdl
198+
*.dbproj.schemaview
199+
*.jfm
200+
*.pfx
201+
*.publishsettings
202+
orleans.codegen.cs
203+
204+
# Since there are multiple workflows, uncomment next line to ignore bower_components
205+
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
206+
#bower_components/
207+
208+
# RIA/Silverlight projects
209+
Generated_Code/
210+
211+
# Backup & report files from converting an old project file
212+
# to a newer Visual Studio version. Backup files are not needed,
213+
# because we have git ;-)
214+
_UpgradeReport_Files/
215+
Backup*/
216+
UpgradeLog*.XML
217+
UpgradeLog*.htm
218+
219+
# SQL Server files
220+
*.mdf
221+
*.ldf
222+
*.ndf
223+
224+
# Business Intelligence projects
225+
*.rdl.data
226+
*.bim.layout
227+
*.bim_*.settings
228+
229+
# Microsoft Fakes
230+
FakesAssemblies/
231+
232+
# GhostDoc plugin setting file
233+
*.GhostDoc.xml
234+
235+
# Node.js Tools for Visual Studio
236+
.ntvs_analysis.dat
237+
node_modules/
238+
239+
# Typescript v1 declaration files
240+
typings/
241+
242+
# Visual Studio 6 build log
243+
*.plg
244+
245+
# Visual Studio 6 workspace options file
246+
*.opt
247+
248+
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
249+
*.vbw
250+
251+
# Visual Studio LightSwitch build output
252+
**/*.HTMLClient/GeneratedArtifacts
253+
**/*.DesktopClient/GeneratedArtifacts
254+
**/*.DesktopClient/ModelManifest.xml
255+
**/*.Server/GeneratedArtifacts
256+
**/*.Server/ModelManifest.xml
257+
_Pvt_Extensions
258+
259+
# Paket dependency manager
260+
.paket/paket.exe
261+
paket-files/
262+
263+
# FAKE - F# Make
264+
.fake/
265+
266+
# JetBrains Rider
267+
.idea/
268+
*.sln.iml
269+
270+
# CodeRush
271+
.cr/
272+
273+
# Python Tools for Visual Studio (PTVS)
274+
__pycache__/
275+
*.pyc
276+
277+
# Cake - Uncomment if you are using it
278+
# tools/**
279+
# !tools/packages.config
280+
281+
# Telerik's JustMock configuration file
282+
*.jmconfig
283+
284+
# BizTalk build output
285+
*.btp.cs
286+
*.btm.cs
287+
*.odx.cs
288+
*.xsd.cs

ConfigurationContrib.sln

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 15
4+
VisualStudioVersion = 15.0.26720.2
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Extensions.Configuration.ImmutableBinder", "src\Microsoft.Extensions.Configuration.ImmutableBinder\Microsoft.Extensions.Configuration.ImmutableBinder.csproj", "{AB0EEEEC-84F5-4C1D-A54C-1FE11E0B14EA}"
7+
EndProject
8+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{FC606723-753B-4D20-B237-92EBE95B07A5}"
9+
EndProject
10+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{42D31455-0FE2-4DD4-9B8A-072A72C8D995}"
11+
EndProject
12+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Extensions.Configuration.ImmutableBinder.Test", "test\Microsoft.Extensions.Configuration.ImmutableBinder.Test\Microsoft.Extensions.Configuration.ImmutableBinder.Test.csproj", "{15FE88F8-981A-4F54-9E0E-209753F725E3}"
13+
EndProject
14+
Global
15+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
16+
Debug|Any CPU = Debug|Any CPU
17+
Release|Any CPU = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
20+
{AB0EEEEC-84F5-4C1D-A54C-1FE11E0B14EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21+
{AB0EEEEC-84F5-4C1D-A54C-1FE11E0B14EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
22+
{AB0EEEEC-84F5-4C1D-A54C-1FE11E0B14EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
23+
{AB0EEEEC-84F5-4C1D-A54C-1FE11E0B14EA}.Release|Any CPU.Build.0 = Release|Any CPU
24+
{15FE88F8-981A-4F54-9E0E-209753F725E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
25+
{15FE88F8-981A-4F54-9E0E-209753F725E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
26+
{15FE88F8-981A-4F54-9E0E-209753F725E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
27+
{15FE88F8-981A-4F54-9E0E-209753F725E3}.Release|Any CPU.Build.0 = Release|Any CPU
28+
EndGlobalSection
29+
GlobalSection(SolutionProperties) = preSolution
30+
HideSolutionNode = FALSE
31+
EndGlobalSection
32+
GlobalSection(NestedProjects) = preSolution
33+
{AB0EEEEC-84F5-4C1D-A54C-1FE11E0B14EA} = {FC606723-753B-4D20-B237-92EBE95B07A5}
34+
{15FE88F8-981A-4F54-9E0E-209753F725E3} = {42D31455-0FE2-4DD4-9B8A-072A72C8D995}
35+
EndGlobalSection
36+
GlobalSection(ExtensibilityGlobals) = postSolution
37+
SolutionGuid = {C716D2B1-81C5-4612-9ADA-5BA86A1AFF3F}
38+
EndGlobalSection
39+
EndGlobal

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2017 Martin Johns
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Configuration Contrib
2+
3+
Contributions to the aspnet/Configuration libraries.
4+
5+
## Microsoft.Extensions.Configuration.ImmutableBinder
6+
7+
Related to the `Microsoft.Extensions.Configuration.Binder` project this project provides a way to bind configurations to an immutable type. In the current version the type must simply provide a single constructor that will be invoked, passing all arguments from the configuration.
8+
9+
Example:
10+
11+
```csharp
12+
// Example immutable options class
13+
public class ComplexOptions
14+
{
15+
// No default constructor - only one accepting all values
16+
public ComplexOptions(
17+
string host,
18+
TimeSpan retentionTime,
19+
DateTime startDate,
20+
DateTime? endDate)
21+
{
22+
Host = host;
23+
RetentionTime = retentionTime;
24+
StartDate = startDate;
25+
EndDate = endDate;
26+
}
27+
28+
// Using getter-only auto-properties
29+
public string Host { get; }
30+
public TimeSpan RetentionTime { get; }
31+
public DateTime StartDate { get; }
32+
public DateTime? EndDate { get; }
33+
}
34+
35+
// Preparing some example data
36+
var dict = new Dictionary<string, string>
37+
{
38+
["Section:Host"] = "www.github.com",
39+
["Section:RetentionTime"] = "00:20:00",
40+
["Section:StartDate"] = "2017-07-27T00:06:00",
41+
["Section:EndDate"] = ""
42+
};
43+
var configurationBuilder = new ConfigurationBuilder().AddInMemoryCollection(dict);
44+
var config = configurationBuilder.Build();
45+
46+
// Retrieve the options
47+
var options = section.ImmutableBind<ComplexOptions>(config.GetSection("Section"));
48+
```

0 commit comments

Comments
 (0)