skip to Main Content

I have a solution with two projects:

  • ASP.NET Core 6 Web API Project
  • Class Library Project

I want to access the appsettings.josn file in the web api project from within the class library.

The api project already has a reference to the class library (Request/Response Models, Services, Handlers…etc).

Adding a reference for the api project to the class library would create a circular reference problem.

What’s the best solution for this problem? Do I ditch the 2-project solution structure and place everything under 1 project?

2

Answers


  1. Make a get function that return information that you want from project that is owner of json settings

    Login or Signup to reply.
  2. We do not recommend using the ConfigurationManager Class in the class library to get the value of appsettings.json.

    Reason:

    Keep your class library flexible,don’t do this in your class library. And Dependency Injection becomes a very flexible and powerful tool.

    Best Practise

    How to use the IOptions pattern for configuration in ASP.NET Core RC2

    Test Steps And Result

    Program.cs

    builder.Services.Configure<AppSettingsModel>(builder.Configuration.GetSection("ApplicationSettings"));
    
    builder.Services.AddOptions();
    

    appsettings.json

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*",
      "ApplicationSettings": {
        "SmtpHost": "aa",
        "EmailRecipients": "bb"
      }
    }
    

    Model and test method in ClassLibrary.

    enter image description here

    Test Method in Controller

    public string GetValue()
    {
        GetValue g = new GetValue();
        string result = g.fortest(_settings.Value.SmtpHost,_settings.Value.EmailRecipients);
        return result;
    }
    

    enter image description here

    Test Result

    enter image description here

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search