# Providers

List of implemented settings providers:

| Provider name                                                                                    | NuGet package                                                                                |
| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- |
| [JSON-file](https://docs.structr.dev/utilities/configuration/providers/jsonsettingsprovider)     | [Structr.Configuration](https://www.nuget.org/packages/Structr.Configuration/)               |
| [XML-file](https://docs.structr.dev/utilities/configuration/providers/xmlsettingsprovider)       | [Structr.Configuration](https://www.nuget.org/packages/Structr.Configuration/)               |
| [In-Memory](https://docs.structr.dev/utilities/configuration/providers/inmemorysettingsprovider) | [Structr.Configuration](https://www.nuget.org/packages/Structr.Configuration/)               |
| [Consul](https://docs.structr.dev/utilities/configuration/providers/consulsettingsprovider)      | [Structr.Configuration.Consul](https://www.nuget.org/packages/Structr.Configuration.Consul/) |

## Settings provider options

When you setup settings provider you can configure provider options represents by `SettingsProviderOptions`.

`SettingsProviderOptions` properties:

| Property name | Property type | Description                                                      |
| ------------- | ------------- | ---------------------------------------------------------------- |
| Cache         | `bool`        | Determines whether settings should be cached, `true` by default. |

Example configure services:

```csharp
services.AddConfiguration()
    .AddJson<SmtpEmailSettings>("path_to_json_file", (serviceProvider, options) =>
    {
        options.Cache = true;
    });
```

If `Cache` options was setting up to `true` then settings provider return cached settings while `IsSettingsModified()` returns `false`, otherwise every settings request invoke `LoadSettings()` method.
