10

I have .netcore 3.1 application and I want to update it to .net 5.0

I have the following code

public static IAppSettings ConfigureAppSettings(this IServiceCollection services, IConfiguration configuration)
{
    void ConfigureSection<Interface, Implementation>(string sectionName)
        where Implementation : Interface, new() where Interface : class
    {
        Implementation configSection = new Implementation();
        configuration.GetSection(sectionName).Bind(configSection);
        services.AddSingleton<Interface>(configSection);
    }
}

it was working previously, but after updating to .net5 I start seeing this compile-time error

CS1061 'IConfigurationSection' does not contain a definition for 'Bind' and no accessible extension method 'Bind' accepting a first argument of type 'IConfigurationSection' could be found (are you missing a using directive or an assembly reference?)

  1. Obviously, the Bind method has been removed and the API is no more compatible
  2. There is no mention for the solution of this problem in the offical documentation for the migration

My question: What is the alternative to the Bind method?

Hakan Fıstık
  • 11,376
  • 8
  • 74
  • 105
  • Are you sure you need one? .NET 5 is .NET *Core* 5. `Bind` is an extension method. You're probably missing a namespace or package – Panagiotis Kanavos Nov 13 '20 at 09:54
  • [Bind is in the same namespace and package it was in 3.1](https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.configuration.configurationbinder?view=dotnet-plat-ext-5.0). Can you post an actual example that reproduces this problem? What packages were used, what `using` statements? – Panagiotis Kanavos Nov 13 '20 at 09:58
  • @PanagiotisKanavos thanks sir, problem solved – Hakan Fıstık Nov 13 '20 at 10:06

1 Answers1

27

I installed this Microsoft.Extensions.Configuration.Binder package and the problem solved.

The strange thing is that when I was using .net-core3.1 I did not need to install it from Nuget but after updating to .net5 I needed to install this package separately.

enter image description here

Hakan Fıstık
  • 11,376
  • 8
  • 74
  • 105
  • 1
    If you created a new project from scratch the proper package references would be included. That's a great way to find out what's wrong - create a new minimal project and check for differences. – Panagiotis Kanavos Nov 13 '20 at 10:08
  • 2
    Reason it works in 3.1, is because Package Microsoft.Extensions.Configuration --version 3.1.11 indirectly takes a dependency on Microsoft.Extensions.Configuration.Binder. Hence following command dotnet add package Microsoft.Extensions.Configuration --version 3.1.11 will automatically install Microsoft.Extensions.Configuration.Binder 3.1.11. – Surender Singh Malik Jan 19 '21 at 12:12
  • @SurenderSinghMalik and this was changed in .NET 5 ? please provide the source, so I will add your comment to the answer, so everyone could benfinit from the information after I will check it. – Hakan Fıstık Jan 19 '21 at 18:00
  • @HakanFıstık yes it has very clearly visible in my experiment. Will share the concrete resource/link if i get anything !! – Surender Singh Malik Jan 21 '21 at 14:57