Megrez7
Megrez7

Reputation: 1477

Razor Pages 3.1 configuration injection into class

Injection of configuration does not work within simple class (not inherited from PageModel) where I keep my code

Despite this code:

private readonly IConfiguration _configuration;

public MyClass(IConfiguration configuration){
_configuration = configuration;
}

class once initialised as an object always asks for parameter configuration, which shall be injected by framework. That is how it works for Razor Pages - classes inherited from PageModel.

All configuration within Program.cs and Startup.cs are standard as where created by Visual Studio. I use Visual Studio 16.4.5 and ASP.NET Core 3.1.

How can I make this work?

Upvotes: 0

Views: 1243

Answers (2)

Rolan
Rolan

Reputation: 3004

You could also try using the [inject] attribute like so:

    [Inject]
    private IConfiguration Config { get; set; }

This should inject your IConfiguration into a property in your class.

Upvotes: 3

Nan Yu
Nan Yu

Reputation: 27588

If you inject IConfiguration in custom class , you can register your class into DI so that it helps resovle dependency :

services.AddTransient<CustomClass>();

Then define instance in where you want to use custom class , for example , in index page :

private readonly ILogger<IndexModel> _logger;
private CustomClass _myClass;
public PrivacyModel(ILogger<IndexModel> logger, CustomClass myClass)
{
    _logger = logger;
    _myClass = myClass;
}

public void OnGet()
{
    var connectString=   _myClass.getConnectString();
}

Your class :

public class CustomClass
{
    private IConfiguration _configuration;

    public CustomClass(IConfiguration configuration) {
        _configuration = configuration;

    }

    public string getConnectString() {

        return  _configuration.GetValue<string>("ConnectionStrings:DefaultConnection"); ;
    }
}

Upvotes: 1

Related Questions