126 lines
5.6 KiB
C#
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<App>()
|
|
/// .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<App>()
|
|
/// .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;
|
|
}
|
|
|
|
}
|
|
}
|