Skip to content

[Enhancement] Allow UsePrism to be called multiple times #3274

Open
@dansiegel

Description

@dansiegel

Summary

As requested by @aritchie, there may be times in which you want to write extensions for the MauiAppBuilder to bring in features and those features would benefit from modifying the PrismAppBuilder as the example below shows adding a module.

public static MauiAppBuilder AddMapsFeature(this MauiAppBuilder builder)
{
    builder.UsePrism(x => x.ConfigureModuleCatalog(modules => modules.AddModule<MapsModule>()));
    return builder;
}

This is currently not recommended in Prism 9.0 as each call to UsePrism initializes a new instance of the PrismAppBuilder and can prevent you from successfully getting callbacks such as Navigating when CreateWindow is called or callbacks for OnInitialized.

Proposed API

I believe we want to ensure that the behavior of UsePrism remains intact as this is also important for Unit Testing. To provide the proper behavior we can instead look at introducing something like:

public static class PrismAppBuilderExtensions
{
    // Ensure that `UsePrism` is called first
    public static MauiAppBuilder ConfigurePrism(this MauiAppBuilder builder, Action<PrismAppBuilder> configure)
    {
        var prism = ContainerLocator.Container.Resolve<PrismAppBuilder>();
        configure(prism);
        return builder;
    }
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions