NCode.Collections.Providers.Abstractions
1.0.0
Prefix Reserved
dotnet add package NCode.Collections.Providers.Abstractions --version 1.0.0
NuGet\Install-Package NCode.Collections.Providers.Abstractions -Version 1.0.0
<PackageReference Include="NCode.Collections.Providers.Abstractions" Version="1.0.0" />
<PackageVersion Include="NCode.Collections.Providers.Abstractions" Version="1.0.0" />
<PackageReference Include="NCode.Collections.Providers.Abstractions" />
paket add NCode.Collections.Providers.Abstractions --version 1.0.0
#r "nuget: NCode.Collections.Providers.Abstractions, 1.0.0"
#:package NCode.Collections.Providers.Abstractions@1.0.0
#addin nuget:?package=NCode.Collections.Providers.Abstractions&version=1.0.0
#tool nuget:?package=NCode.Collections.Providers.Abstractions&version=1.0.0
NCode.Collections.Providers
A .NET library for building dynamic, change-aware collection providers that aggregate multiple data sources with automatic change notifications.
Features
Core Abstractions (NCode.Collections.Providers.Abstractions)
ICollectionDataSource<T>- Interface for data sources that provide a collection of items with change token supportICollectionProvider<TItem, TCollection>- Interface for providers that aggregate multiple data sources into a unified collectionISupportChangeToken- Interface for objects that support change notification viaIChangeTokenINullChangeToken- Marker interface for change tokens that never signal changes
Data Source Implementations (NCode.Collections.Providers)
- Static Data Source - Wraps an immutable collection that never changes
- Observable Data Source - Wraps an
ObservableCollection<T>with automatic change notifications when items are added, removed, or modified - Composite Data Source - Aggregates multiple data sources into a single unified collection with consolidated change notifications
- Periodic Polling Data Source - Periodically fetches data from external sources (APIs, databases, files) with configurable refresh intervals and error handling
Factory Interfaces
ICollectionDataSourceFactory- Creates data source instances for different scenariosICollectionProviderFactory- Creates collection provider instances that aggregate data sources
Change Token Support
- Automatic propagation of change notifications from data sources to consumers
- Lazy initialization of change tokens for efficiency
- Thread-safe collection updates when changes are detected
- Support for additional change token producers beyond data sources (e.g., configuration changes)
Dependency Injection Integration
AddCollectionProviders()extension method forIServiceCollection- Singleton registration of factories for optimal performance
- Support for DI-managed data source lifetimes
Installation
dotnet add package NCode.Collections.Providers
Or for abstractions only:
dotnet add package NCode.Collections.Providers.Abstractions
Quick Start
Register Services
services.AddCollectionProviders();
Create a Static Data Source
var factory = serviceProvider.GetRequiredService<ICollectionDataSourceFactory>();
var dataSource = factory.CreateStatic(new[] { "item1", "item2", "item3" });
Create an Observable Data Source
var observableCollection = new ObservableCollection<string>();
var dataSource = factory.CreateObservable(observableCollection);
// Changes to observableCollection will trigger change notifications
observableCollection.Add("new item");
Create a Periodic Polling Data Source
var dataSource = factory.CreatePeriodicPolling(
state: httpClient,
initialCollection: Array.Empty<User>(),
refreshInterval: TimeSpan.FromMinutes(5),
refreshCollectionAsync: async (client, current, ct) =>
{
var users = await client.GetFromJsonAsync<List<User>>("/api/users", ct);
return RefreshCollectionResultFactory.Changed(users);
},
handleExceptionAsync: async (ex, ct) =>
{
logger.LogError(ex.SourceException, "Failed to refresh users");
}
);
Create a Collection Provider
var providerFactory = serviceProvider.GetRequiredService<ICollectionProviderFactory>();
var provider = providerFactory.Create(
collectionFactory: items => items.ToList(),
dataSources: serviceProvider.GetServices<ICollectionDataSource<User>>()
);
// Access the aggregated collection
var users = provider.Collection;
// Subscribe to changes
ChangeToken.OnChange(provider.GetChangeToken, () =>
{
Console.WriteLine("Collection changed!");
var updatedUsers = provider.Collection;
});
License
Licensed under the Apache License, Version 2.0. See LICENSE.txt for details.
Target Frameworks
- .NET 8.0
- .NET 10.0
Release Notes
- v1.0.0 - Initial release
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Primitives (>= 10.0.2)
-
net8.0
- Microsoft.Extensions.Primitives (>= 10.0.2)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on NCode.Collections.Providers.Abstractions:
| Package | Downloads |
|---|---|
|
NCode.Collections.Providers
Default implementations for dynamic, change-aware collection providers. Includes static, observable, composite, and periodic polling data sources with automatic change notifications via IChangeToken. Provides dependency injection integration with Microsoft.Extensions.DependencyInjection. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 102 | 1/19/2026 |
Built on 2026-01-19 18:03:26Z