Skip to content

Commit

Permalink
Instance Is Now Created By Service Provider
Browse files Browse the repository at this point in the history
This is an experimental implementation to reduce the static instance state code & instead use the service collection to handle resolving user dialogs
  • Loading branch information
Axemasta committed Sep 4, 2023
1 parent bc2b4d9 commit d4332e5
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System.Text;

namespace Controls.UserDialogs.Maui;

public class CustomImplementationInvalidException : Exception
{
public CustomImplementationInvalidException()
: base($"Custom implementations must implement {nameof(IUserDialogs)}")
{
}
}

15 changes: 2 additions & 13 deletions Controls.UserDialogs.Maui/Shared/MauiAppBuilderExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,10 @@ public static class MauiAppBuilderExtension
{
public static MauiAppBuilder UseUserDialogs(this MauiAppBuilder builder, Action configure = null)
{
UserDialogs.Instance = new UserDialogsImplementation();

configure?.Invoke();

return builder;
}

public static MauiAppBuilder UseUserDialogs(this MauiAppBuilder builder, bool registerInterface, Action configure = null)
{
UseUserDialogs(builder, configure);

if (registerInterface)
{
builder.Services.AddTransient((s) => UserDialogs.Instance);
}
builder.Services.AddSingleton(typeof(IUserDialogs), UserDialogsConfig.ImplementationType);
builder.Services.AddTransient<IMauiInitializeService, UserDialogsInitializeService>();

return builder;
}
Expand Down
5 changes: 3 additions & 2 deletions Controls.UserDialogs.Maui/Shared/UserDialogs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
public class UserDialogs
{
static IUserDialogs _currentInstance;

public static IUserDialogs Instance
{
get
Expand All @@ -12,6 +13,6 @@ public static IUserDialogs Instance

return _currentInstance;
}
set => _currentInstance = value;
internal set => _currentInstance = value;
}
}
}
20 changes: 20 additions & 0 deletions Controls.UserDialogs.Maui/Shared/UserDialogsConfig.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
namespace Controls.UserDialogs.Maui;

public class UserDialogsConfig
{
private static Type _implementationType = typeof(UserDialogsImplementation);

public static Type ImplementationType
{
get => _implementationType;
set
{
if (!typeof(IUserDialogs).IsAssignableFrom(value))
{
throw new CustomImplementationInvalidException();
}

_implementationType = value;
}
}
}
11 changes: 11 additions & 0 deletions Controls.UserDialogs.Maui/Shared/UserDialogsInitializeService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
namespace Controls.UserDialogs.Maui;

internal class UserDialogsInitializeService : IMauiInitializeService
{
public void Initialize(IServiceProvider services)
{
var userDialogs = services.GetService<IUserDialogs>();

UserDialogs.Instance = userDialogs;
}
}
4 changes: 3 additions & 1 deletion Sample/MauiProgram.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ public static MauiApp CreateMauiApp()
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseUserDialogs(true, () =>
.UseUserDialogs(() =>
{
//UserDialogsConfig.ImplementationType = typeof(YourCustomDialogImplementation);
#if ANDROID
var fontFamily = "OpenSans-Default.ttf";
#else
Expand Down

0 comments on commit d4332e5

Please sign in to comment.