Skip to content

Commit 69501dc

Browse files
committed
Allow for a controlled data call
1 parent 5816b7f commit 69501dc

File tree

4 files changed

+13
-5
lines changed

4 files changed

+13
-5
lines changed

samples/Sample/MauiProgram.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public static MauiApp CreateMauiApp()
1717
// if remote has requested past values, those will be available here through configuration
1818
// so you could basically change the URI & AccessKey below
1919
// calling this method adds IRemoteConfigurationProvider to DI which allows you to await the configuration in a startup page if needed
20-
builder.AddRemoteMaui();
20+
builder.AddRemoteConfigurationMaui();
2121

2222
// The extension method `BindConfiguration` is part of Microsoft.Extensions.Options.ConfigurationExtensions - don't hate the messenger
2323
builder.Services.AddOptions<MyConfig>().BindConfiguration("");

src/Shiny.Extensions.Configuration.Remote.Maui/MauiAppBuilderExtensions.cs

+6-1
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@ namespace Shiny.Extensions.Configuration.Remote.Maui;
33

44
public static class MauiAppBuilderExtensions
55
{
6-
public static MauiAppBuilder AddRemoteMaui(this MauiAppBuilder builder, string configurationFileName = "remotesettings.json")
6+
public static MauiAppBuilder AddRemoteConfigurationMaui(
7+
this MauiAppBuilder builder,
8+
Func<CancellationToken, Task<object>>? getData = null,
9+
string configurationFileName = "remotesettings.json"
10+
)
711
{
812
builder.Configuration.AddRemote(
913
Path.Combine(FileSystem.AppDataDirectory, configurationFileName),
1014
config => config["ConfigurationUri"]!,
15+
getData,
1116
false,
1217
builder.Services
1318
);

src/Shiny.Extensions.Configuration.Remote/ConfigurationExtensions.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ public static class ConfigurationExtensions
1212
/// <param name="builder">The configuration builder</param>
1313
/// <param name="configurationFilePath">The location of where the remote settings should be persisted</param>
1414
/// <param name="getConfigurationUri">This allows you to get the configuration URI from the previous remote call & allows you to update the ConfigurationUri if needed</param>
15+
/// <param name="getData">If you wish to control how/what data is returned, pass this function</param>
1516
/// <param name="waitForRemoteLoad">If you want the network call to be waited until completion before returning</param>
1617
/// <param name="services">If presented to the extension method, IRemoteConfigurationProvider is installed to the service container</param>
1718
/// <returns>The current configuration builder to allow for chaining</returns>
1819
public static IConfigurationBuilder AddRemote(
1920
this IConfigurationBuilder builder,
2021
string configurationFilePath,
2122
Func<IConfiguration, string> getConfigurationUri,
23+
Func<CancellationToken, Task<object>>? getData = null,
2224
bool waitForRemoteLoad = true,
2325
IServiceCollection? services = null
2426
)
@@ -30,7 +32,7 @@ public static IConfigurationBuilder AddRemote(
3032
uri,
3133
waitForRemoteLoad,
3234
configurationFilePath
33-
), services));
35+
), getData, services));
3436

3537
return builder;
3638
}

src/Shiny.Extensions.Configuration.Remote/Infrastructure/RemoteConfigurationSource.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
namespace Shiny.Extensions.Configuration.Remote.Infrastructure;
44

5-
public class RemoteConfigurationSource(RemoteConfig config, IServiceCollection? services) : IConfigurationSource
5+
6+
public class RemoteConfigurationSource(RemoteConfig config, Func<CancellationToken, Task<object>>? getData, IServiceCollection? services) : IConfigurationSource
67
{
78
public IConfigurationProvider Build(IConfigurationBuilder builder)
89
{
9-
var provider = new RemoteConfigurationProvider(config);
10+
var provider = new RemoteConfigurationProvider(config, getData);
1011
services?.AddSingleton<IRemoteConfigurationProvider>(provider);
1112
return provider;
1213
}

0 commit comments

Comments
 (0)