Class XmlMultiStreamLoader<TRecord>

Namespace
Wolfgang.Etl.Xml
Assembly
Wolfgang.Etl.Xml.dll

Loads items of type TRecord into multiple streams, writing one XML document per stream.

public sealed class XmlMultiStreamLoader<TRecord> : LoaderBase<TRecord, XmlReport>, ILoadWithProgressAndCancellationAsync<TRecord, XmlReport>, ILoadWithProgressAsync<TRecord, XmlReport>, ILoadWithCancellationAsync<TRecord>, ILoadAsync<TRecord> where TRecord : notnull, new()

Type Parameters

TRecord

The type of items to load. Must be notnull and have a parameterless constructor.

Inheritance
LoaderBase<TRecord, XmlReport>
XmlMultiStreamLoader<TRecord>
Implements
ILoadWithProgressAndCancellationAsync<TRecord, XmlReport>
ILoadWithProgressAsync<TRecord, XmlReport>
ILoadWithCancellationAsync<TRecord>
ILoadAsync<TRecord>
Inherited Members
LoaderBase<TRecord, XmlReport>.ReportingInterval
LoaderBase<TRecord, XmlReport>.CurrentItemCount
LoaderBase<TRecord, XmlReport>.CurrentSkippedItemCount
LoaderBase<TRecord, XmlReport>.MaximumItemCount
LoaderBase<TRecord, XmlReport>.SkipItemCount

Examples

var loader = new XmlMultiStreamLoader<Person>
(
    person => File.Create($"output/{person.Id}.xml")
);
await loader.LoadAsync(items, cancellationToken);

Remarks

For each item in the input sequence, calls a factory function to obtain a Stream, serializes the item as a single XML document, and disposes the stream. The factory receives the item being written, allowing stream creation based on item properties (e.g., generating file names from record fields).

Constructors

XmlMultiStreamLoader(Func<TRecord, Stream>)

Initializes a new instance of the XmlMultiStreamLoader<TRecord> class.

public XmlMultiStreamLoader(Func<TRecord, Stream> streamFactory)

Parameters

streamFactory Func<TRecord, Stream>

A factory function that receives the item to be written and returns a Stream to write it to. The loader will dispose the stream after writing.

Exceptions

ArgumentNullException

Thrown when streamFactory is null.

XmlMultiStreamLoader(Func<TRecord, Stream>, ILogger<XmlMultiStreamLoader<TRecord>>)

Initializes a new instance of the XmlMultiStreamLoader<TRecord> class with a logger.

public XmlMultiStreamLoader(Func<TRecord, Stream> streamFactory, ILogger<XmlMultiStreamLoader<TRecord>> logger)

Parameters

streamFactory Func<TRecord, Stream>

A factory function that receives the item to be written and returns a Stream to write it to. The loader will dispose the stream after writing.

logger ILogger<XmlMultiStreamLoader<TRecord>>

The logger instance for diagnostic output.

Exceptions

ArgumentNullException

Thrown when streamFactory or logger is null.

XmlMultiStreamLoader(Func<TRecord, Stream>, XmlWriterSettings, ILogger<XmlMultiStreamLoader<TRecord>>)

Initializes a new instance of the XmlMultiStreamLoader<TRecord> class with custom writer settings.

public XmlMultiStreamLoader(Func<TRecord, Stream> streamFactory, XmlWriterSettings writerSettings, ILogger<XmlMultiStreamLoader<TRecord>> logger)

Parameters

streamFactory Func<TRecord, Stream>

A factory function that receives the item to be written and returns a Stream to write it to. The loader will dispose the stream after writing.

writerSettings XmlWriterSettings

The XML writer settings to use for serialization.

logger ILogger<XmlMultiStreamLoader<TRecord>>

The logger instance for diagnostic output.

Exceptions

ArgumentNullException

Thrown when streamFactory, writerSettings, or logger is null.

Methods

CreateProgressReport()

Creates a progress report of type TProgress. This gives the derived class the opportunity to implement a custom progress report that is specific to the loading process.

protected override XmlReport CreateProgressReport()

Returns

XmlReport

Progress of type TProgress

CreateProgressTimer(IProgress<XmlReport>)

Creates the Wolfgang.Etl.Abstractions.IProgressTimer used to drive progress callbacks. Override this method in a derived class to inject a custom timer (for example, a custom implementation that allows manual control in unit tests).

protected override IProgressTimer CreateProgressTimer(IProgress<XmlReport> progress)

Parameters

progress IProgress<XmlReport>

The progress sink that will receive callbacks.

Returns

IProgressTimer

A started Wolfgang.Etl.Abstractions.IProgressTimer instance.

LoadWorkerAsync(IAsyncEnumerable<TRecord>, CancellationToken)

This method is the core implementation of the loading logic and should be overridden by derived classes.

protected override Task LoadWorkerAsync(IAsyncEnumerable<TRecord> items, CancellationToken token)

Parameters

items IAsyncEnumerable<TRecord>

The items to be loaded to the destination.

token CancellationToken

A CancellationToken to observe while waiting for the task to complete.

Returns

Task

A task representing the asynchronous operation.

Remarks

Items may be an empty sequence if no data is available or if the loading fails.

Exceptions

ArgumentNullException

Argument items is null