Table of Contents

API: UniDataGen.Targets

The sinks and the dependency-injection registration model.

Registration

public interface ISinkRegistration
{
    string TargetType { get; }
    SinkKind Kind { get; }
    ISink Create(TargetConfig config, ILogger logger);
}

public sealed class SinkRegistration : ISinkRegistration
{
    public SinkRegistration(string targetType, SinkKind kind, Func<TargetConfig, ILogger, ISink> factory);
}

public sealed class DiSinkFactory : ISinkFactory
{
    public DiSinkFactory(IEnumerable<ISinkRegistration> registrations, ILoggerFactory? loggerFactory = null);
    public IReadOnlyCollection<string> RegisteredTargetTypes { get; }
}

public static class DefaultSinks
{
    public static IReadOnlyList<ISinkRegistration> All();
}

public static class TargetServiceCollectionExtensions
{
    public static IServiceCollection AddUniDataGenTargets(this IServiceCollection services);
    public static IServiceCollection AddSink(this IServiceCollection services, string targetType, SinkKind kind, Func<TargetConfig, ILogger, ISink> factory);
}

AddUniDataGenTargets registers every built-in sink and a DiSinkFactory as ISinkFactory. AddSink adds or overrides one target type; the last registration for a type wins. SinkFactory is a convenience that wraps DiSinkFactory with DefaultSinks.All() for hosts that do not use a container.

Sinks

Class Target type Kind
JsonFileSink JsonFile Batch
ConsoleSink Console Streaming
NullSink Null Batch
AdlsGen2Sink ADLSGen2 Batch
AdlsGen2ParquetSink ADLSGen2Parquet Batch
AzureBlobSink AzureBlobStorage Batch
AzureFilesSink AzureFiles Batch
AzureDataShareSink AzureDataShare Batch
OneLakeLakehouseSink OneLakeLakehouse Batch
SqlServerSink AzureSqlDB, OneLakeWarehouse Batch
PostgreSqlSink PostgreSQL Batch
CosmosDbSink AzureCosmosDB Batch
AiSearchSink AzureAISearchIndex Batch
EventHubsSink EventHubs Streaming
ServiceBusSink AzureServiceBus Streaming
EventGridSink AzureEventGrid Streaming
EventhouseSink FabricEventhouse Streaming
DataverseSink Dataverse Batch
DatabricksUcSink DatabricksUC Batch

Each sink constructor takes a TargetConfig and an optional ILogger.

Helpers

Type Purpose
NdjsonFormatter Serialize, SerializeRecord, SerializeToUtf8.
ParquetBatchWriter WriteAsync(EntityBatch) returns Parquet bytes with an inferred schema.
AdlsPath BuildDirectory, BuildFileName for partition paths.
AdlsUploader, BlobUploader Shared Data Lake and Blob plumbing.
RecordDocument Flattens a record to a document for row, document, and search targets.

To add a target, implement ISink and register it with AddSink. No edit to the factory is required.