Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

C# 9 positional records - support for Microsoft.Extensions.Configuration.ConfigurationBinder #46299

Closed
iSeiryu opened this issue Dec 21, 2020 · 3 comments
Labels
area-Extensions-Configuration untriaged New issue has not been triaged by the area owner

Comments

@iSeiryu
Copy link

iSeiryu commented Dec 21, 2020

Description

appsettings.json

{
  "Azure": {
    "BaseUrl": "https://azure.com",
    "TenantId": "Id"
  }
}

record

public sealed record AzureInfo(string BaseUrl, string TenantId);

Startup.cs

var appInfo = configuration.GetSection("Azure").Get<AzureInfo>();

Getting exception

System.InvalidOperationException: Cannot create instance of type 'AzureInfo' because it is missing a public parameterless constructor.
   at Microsoft.Extensions.Configuration.ConfigurationBinder.CreateInstance(Type type)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.BindInstance(Type type, Object instance, IConfiguration config, BinderOptions options)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.Get(IConfiguration configuration, Type type, Action`1 configureOptions)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.Get[T](IConfiguration configuration, Action`1 configureOptions)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.Get[T](IConfiguration configuration)

Configuration

mcr.microsoft.com/dotnet/sdk:latest

Other information

The extension is located here: https://github.com/dotnet/runtime/blob/0fad9d646359c71f4d5e9443500fd9248ce10aa4/src/libraries/Microsoft.Extensions.Configuration.Binder/src/ConfigurationBinder.cs

Workaround

If I change my record to this it works

public sealed record AzureInfo {
    public string BaseUrl { get; init; }
    public string TenantId { get; init; }
}
@Dotnet-GitSync-Bot Dotnet-GitSync-Bot added area-System.Configuration untriaged New issue has not been triaged by the area owner labels Dec 21, 2020
@ghost
Copy link

ghost commented Dec 21, 2020

Tagging subscribers to this area: @safern
See info in area-owners.md if you want to be subscribed.

Issue Details

Description

appsettings.json

{
  "Azure": {
    "BaseUrl": "https://azure.com",
    "TenantId": "Id"
  }
}

record

public sealed record AzureInfo(string BaseUrl, string TenantId);

Startup.cs

var appInfo = configuration.GetSection("Azure").Get<AzureInfo>();

Getting exception

System.InvalidOperationException: Cannot create instance of type 'AzureInfo' because it is missing a public parameterless constructor.
   at Microsoft.Extensions.Configuration.ConfigurationBinder.CreateInstance(Type type)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.BindInstance(Type type, Object instance, IConfiguration config, BinderOptions options)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.Get(IConfiguration configuration, Type type, Action`1 configureOptions)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.Get[T](IConfiguration configuration, Action`1 configureOptions)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.Get[T](IConfiguration configuration)

Configuration

mcr.microsoft.com/dotnet/sdk:latest

Other information

The extension is located here: https://github.com/dotnet/runtime/blob/0fad9d646359c71f4d5e9443500fd9248ce10aa4/src/libraries/Microsoft.Extensions.Configuration.Binder/src/ConfigurationBinder.cs

Workaround

If I change my record to this it works

public sealed record AzureInfo {
    public string BaseUrl { get; init; }
    public string TenantId { get; init; }
}
Author: iSeiryu
Assignees: -
Labels:

area-System.Configuration, untriaged

Milestone: -

@ghost
Copy link

ghost commented Dec 21, 2020

Tagging subscribers to this area: @maryamariyan
See info in area-owners.md if you want to be subscribed.

Issue Details

Description

appsettings.json

{
  "Azure": {
    "BaseUrl": "https://azure.com",
    "TenantId": "Id"
  }
}

record

public sealed record AzureInfo(string BaseUrl, string TenantId);

Startup.cs

var appInfo = configuration.GetSection("Azure").Get<AzureInfo>();

Getting exception

System.InvalidOperationException: Cannot create instance of type 'AzureInfo' because it is missing a public parameterless constructor.
   at Microsoft.Extensions.Configuration.ConfigurationBinder.CreateInstance(Type type)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.BindInstance(Type type, Object instance, IConfiguration config, BinderOptions options)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.Get(IConfiguration configuration, Type type, Action`1 configureOptions)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.Get[T](IConfiguration configuration, Action`1 configureOptions)
   at Microsoft.Extensions.Configuration.ConfigurationBinder.Get[T](IConfiguration configuration)

Configuration

mcr.microsoft.com/dotnet/sdk:latest

Other information

The extension is located here: https://github.com/dotnet/runtime/blob/0fad9d646359c71f4d5e9443500fd9248ce10aa4/src/libraries/Microsoft.Extensions.Configuration.Binder/src/ConfigurationBinder.cs

Workaround

If I change my record to this it works

public sealed record AzureInfo {
    public string BaseUrl { get; init; }
    public string TenantId { get; init; }
}
Author: iSeiryu
Assignees: -
Labels:

area-Extensions-Configuration, area-System.Configuration, untriaged

Milestone: -

@davidfowl
Copy link
Member

Dupe of #43662

@ghost ghost locked as resolved and limited conversation to collaborators Jan 20, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-Extensions-Configuration untriaged New issue has not been triaged by the area owner
Projects
None yet
Development

No branches or pull requests

3 participants