diff --git a/src/Piral.Blazor.Core/IComponentActivationService.cs b/src/Piral.Blazor.Core/IComponentActivationService.cs
index 0eb5846..bc00279 100644
--- a/src/Piral.Blazor.Core/IComponentActivationService.cs
+++ b/src/Piral.Blazor.Core/IComponentActivationService.cs
@@ -9,6 +9,11 @@ public interface IComponentActivationService
/// The handler to monitor when the active components changed.
///
event EventHandler ComponentsChanged;
+
+ ///
+ /// The handler to monitor when the available providers changed.
+ ///
+ event EventHandler ProvidersChanged;
///
/// The handler to monitor when the root component changed.
@@ -20,6 +25,11 @@ public interface IComponentActivationService
///
IEnumerable
Components { get; }
+ ///
+ /// Gets the currently available providers.
+ ///
+ IEnumerable Providers { get; }
+
///
/// Gets a mounted element using its reference ID.
///
@@ -29,4 +39,4 @@ public interface IComponentActivationService
/// Gets the configured root component.
///
Type Root { get; }
-}
\ No newline at end of file
+}
diff --git a/src/Piral.Blazor.Core/PiralProviders.razor b/src/Piral.Blazor.Core/PiralProviders.razor
new file mode 100644
index 0000000..594b496
--- /dev/null
+++ b/src/Piral.Blazor.Core/PiralProviders.razor
@@ -0,0 +1,25 @@
+@inject IComponentActivationService Activation
+@implements IDisposable
+
+@foreach (var provider in Activation.Providers)
+{
+
+}
+
+@code {
+private void ProvidersChanged(object sender, EventArgs e)
+{
+ this.StateHasChanged();
+}
+
+public void Dispose()
+{
+ Activation.ProvidersChanged -= ProvidersChanged;
+}
+
+protected override Task OnInitializedAsync()
+{
+ Activation.ProvidersChanged += ProvidersChanged;
+ return base.OnInitializedAsync();
+}
+}
diff --git a/src/Piral.Blazor.Utils/PiralProviderAttribute.cs b/src/Piral.Blazor.Utils/PiralProviderAttribute.cs
new file mode 100644
index 0000000..fa72fb7
--- /dev/null
+++ b/src/Piral.Blazor.Utils/PiralProviderAttribute.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace Piral.Blazor.Utils;
+
+[AttributeUsage(AttributeTargets.Class, Inherited = true)]
+public class PiralProviderAttribute : Attribute
+{
+ ///
+ /// Registers a Piral provider component.
+ ///
+ public PiralProviderAttribute() { }
+}