using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using CredentialManager;
using CredentialManager.Services;
using CredentialManager.Data;
using DataConnection.CredentialManagement.Interfaces;
using DataConnection.CredentialManagement.Services;
namespace DataConnection.CredentialManagement;
///
/// Metodi di estensione per configurare i servizi di gestione credenziali per DataConnection
///
public static class ServiceCollectionExtensions
{
///
/// Aggiunge i servizi di gestione credenziali a DataConnection
///
/// La collezione di servizi
/// Stringa di connessione per il database delle credenziali
/// La collezione di servizi per il chaining
public static IServiceCollection AddDataConnectionCredentialManagement(
this IServiceCollection services,
string connectionString = "Data Source=credentials.db")
{
// Estrai il percorso del database dalla connection string
string databasePath;
if (connectionString.StartsWith("Data Source=", StringComparison.OrdinalIgnoreCase))
{
databasePath = connectionString.Substring("Data Source=".Length);
}
else
{
// Se non è una connection string, assumiamo che sia già un percorso
databasePath = connectionString;
}
// Aggiungi i servizi base di CredentialManager
services.AddCredentialManager(databasePath);
// Aggiungi il servizio di gestione associazioni record
services.AddScoped();
// Aggiungi il servizio di integrazione DataConnection
services.AddScoped();
return services;
}
///
/// Aggiunge i servizi di gestione credenziali con configurazione avanzata
///
/// La collezione di servizi
/// Azione per configurare le opzioni
/// La collezione di servizi per il chaining
public static IServiceCollection AddDataConnectionCredentialManagement(
this IServiceCollection services,
Action configure)
{
var options = new DataConnectionCredentialOptions();
configure(options);
return services.AddDataConnectionCredentialManagement(options.ConnectionString);
}
}
///
/// Opzioni per la configurazione del DataConnectionCredentialManagement
///
public class DataConnectionCredentialOptions
{
///
/// Stringa di connessione per il database delle credenziali
///
public string ConnectionString { get; set; } = "Data Source=credentials.db";
///
/// Abilita il logging dettagliato
///
public bool EnableDetailedLogging { get; set; } = false;
///
/// Timeout per le operazioni sul database (in secondi)
///
public int DatabaseTimeout { get; set; } = 30;
}
///
/// Interfaccia per il servizio di gestione credenziali specifico per DataConnection
/// Questa interfaccia estende le funzionalità base di CredentialManager
/// con metodi specifici per l'integrazione con DataConnection
///
public interface IDataConnectionCredentialServiceConfiguration
{
///
/// Configura il servizio con le opzioni specificate
///
/// Le opzioni di configurazione
void Configure(DataConnectionCredentialOptions options);
///
/// Verifica la connessione al database delle credenziali
///
/// True se la connessione è valida
Task TestConnectionAsync();
}