Files
replicate.maui/Replicate.Maui/ServiceCollectionExtensions.cs
2025-12-10 21:59:12 -05:00

126 lines
5.6 KiB
C#

using CommunityToolkit.Maui;
using Microsoft.Extensions.DependencyInjection;
using MarketAlly.Replicate.Maui.Controls;
using MarketAlly.Replicate.Maui.Services;
using MarketAlly.Replicate.Maui.ViewModels;
namespace MarketAlly.Replicate.Maui
{
public static class ServiceCollectionExtensions
{
/// <summary>
/// Adds Replicate transformer services to the service collection.
/// Registers both IReplicateTransformer (for default usage) and IReplicateTransformerFactory (for BYOK scenarios).
/// </summary>
/// <param name="services">The service collection.</param>
/// <param name="configure">Action to configure ReplicateSettings.</param>
/// <returns>The service collection for chaining.</returns>
public static IServiceCollection AddReplicateTransformer(
this IServiceCollection services,
Action<ReplicateSettings> configure)
{
services.Configure(configure);
services.AddHttpClient<IReplicateTransformer, ReplicateTransformer>();
services.AddHttpClient<IFileSaveService, FileSaveService>();
services.AddHttpClient(); // For factory usage
services.AddSingleton<IReplicateTransformerFactory, ReplicateTransformerFactory>();
services.AddTransient<TransformerViewModel>();
return services;
}
/// <summary>
/// Adds Replicate transformer services to the service collection using configuration section.
/// Registers both IReplicateTransformer (for default usage) and IReplicateTransformerFactory (for BYOK scenarios).
/// </summary>
/// <param name="services">The service collection.</param>
/// <param name="settings">The pre-configured settings instance.</param>
/// <returns>The service collection for chaining.</returns>
public static IServiceCollection AddReplicateTransformer(
this IServiceCollection services,
ReplicateSettings settings)
{
services.Configure<ReplicateSettings>(opt =>
{
opt.ApiToken = settings.ApiToken;
opt.ApiUrl = settings.ApiUrl;
opt.ModelVersion = settings.ModelVersion;
opt.ModelName = settings.ModelName;
opt.TimeoutSeconds = settings.TimeoutSeconds;
opt.PollingDelayMs = settings.PollingDelayMs;
opt.ImagePrompt = settings.ImagePrompt;
opt.VideoModelName = settings.VideoModelName;
opt.VideoModelVersion = settings.VideoModelVersion;
opt.VideoPrompt = settings.VideoPrompt;
opt.VideoTimeoutSeconds = settings.VideoTimeoutSeconds;
opt.VideoPollingDelayMs = settings.VideoPollingDelayMs;
opt.DefaultSettings = settings.DefaultSettings;
opt.VideoSettings = settings.VideoSettings;
});
services.AddHttpClient<IReplicateTransformer, ReplicateTransformer>();
services.AddHttpClient<IFileSaveService, FileSaveService>();
services.AddHttpClient(); // For factory usage
services.AddSingleton<IReplicateTransformerFactory, ReplicateTransformerFactory>();
services.AddTransient<TransformerViewModel>();
return services;
}
}
public static class MauiAppBuilderExtensions
{
/// <summary>
/// Configures MAUI to use Replicate.Maui controls including MediaElement for video playback.
/// Call this in your MauiProgram.cs CreateMauiApp() method.
/// </summary>
/// <example>
/// var builder = MauiApp.CreateBuilder();
/// builder
/// .UseMauiApp&lt;App&gt;()
/// .UseReplicateMaui()
/// .ConfigureFonts(...);
/// </example>
public static MauiAppBuilder UseReplicateMaui(this MauiAppBuilder builder)
{
builder.UseMauiCommunityToolkitMediaElement();
return builder;
}
/// <summary>
/// Configures MAUI to use Replicate.Maui controls and registers transformer services.
/// Call this in your MauiProgram.cs CreateMauiApp() method.
/// </summary>
/// <param name="builder">The MauiAppBuilder.</param>
/// <param name="configure">Action to configure ReplicateSettings.</param>
/// <example>
/// var builder = MauiApp.CreateBuilder();
/// builder
/// .UseMauiApp&lt;App&gt;()
/// .UseReplicateMaui(settings => settings.ApiToken = "your-token")
/// .ConfigureFonts(...);
/// </example>
public static MauiAppBuilder UseReplicateMaui(
this MauiAppBuilder builder,
Action<ReplicateSettings> configure)
{
builder.UseMauiCommunityToolkitMediaElement();
builder.Services.AddReplicateTransformer(configure);
return builder;
}
/// <summary>
/// Configures MAUI to use Replicate.Maui controls and registers transformer services.
/// Call this in your MauiProgram.cs CreateMauiApp() method.
/// </summary>
/// <param name="builder">The MauiAppBuilder.</param>
/// <param name="settings">The pre-configured settings instance.</param>
public static MauiAppBuilder UseReplicateMaui(
this MauiAppBuilder builder,
ReplicateSettings settings)
{
builder.UseMauiCommunityToolkitMediaElement();
builder.Services.AddReplicateTransformer(settings);
return builder;
}
}
}