33using System . Linq ;
44using System . Threading . Tasks ;
55
6- namespace Serilog . Ui . Core . Services
6+ namespace Serilog . Ui . Core
77{
88 /// <summary>
9- /// Aggregates multiple <see cref="IDataProvider"/> into one instance.
9+ /// Aggregates multiple <see cref="IDataProvider"/> into one instance.
1010 /// </summary>
1111 public class AggregateDataProvider : IDataProvider
1212 {
13- /// <summary>
14- /// <inheritdoc cref="IDataProvider.Name"/>
15- /// NOTE We assume only one Aggregate provider, so the name is static.
16- /// </summary>
17- public string Name => nameof ( AggregateDataProvider ) ;
18-
19- private IDataProvider _dataProvider ;
20-
21- /// <summary>
22- /// If there is only one data provider, this is it.
23- /// If there are multiple, this is the current data provider.
24- /// </summary>
25- public IDataProvider DataProvider => _dataProvider ;
26-
13+ private IDataProvider _selectedDataProvider ;
2714 private readonly Dictionary < string , IDataProvider > _dataProviders = new Dictionary < string , IDataProvider > ( ) ;
28-
15+
2916 public AggregateDataProvider ( IEnumerable < IDataProvider > dataProviders )
3017 {
31- if ( dataProviders == null ) throw new ArgumentNullException ( nameof ( dataProviders ) ) ;
18+ if ( dataProviders == null )
19+ throw new ArgumentNullException ( nameof ( dataProviders ) ) ;
3220
33- foreach ( var grouped in dataProviders
34- . GroupBy ( c => c . Name , e => e , ( k , e ) => e . ToList ( ) ) )
21+ foreach ( var grouped in dataProviders . GroupBy ( dp => dp . Name , p => p , ( k , e ) => e . ToList ( ) ) )
3522 {
3623 var name = grouped [ 0 ] . Name ;
3724
@@ -41,8 +28,9 @@ public AggregateDataProvider(IEnumerable<IDataProvider> dataProviders)
4128 }
4229 else
4330 {
44- // When providers with the same name are registered, we ensure uniqueness by generating a key
45- // I.e. ["MSSQL.dbo.logs", "MSSQL.dbo.logs"] => ["MSSQL.dbo.logs[0]", "MSSQL.dbo.logs[1]"]
31+ // When providers with the same name are registered, we ensure uniqueness by
32+ // generating a key I.e. ["MSSQL.dbo.logs", "MSSQL.dbo.logs"] =>
33+ // ["MSSQL.dbo.logs[0]", "MSSQL.dbo.logs[1]"]
4634 for ( var i = 0 ; i < grouped . Count ; i ++ )
4735 {
4836 var dataProvider = grouped [ i ] ;
@@ -51,22 +39,34 @@ public AggregateDataProvider(IEnumerable<IDataProvider> dataProviders)
5139 }
5240 }
5341
54- _dataProvider = _dataProviders . First ( c => true ) . Value ;
42+ _selectedDataProvider = _dataProviders . First ( c => true ) . Value ;
5543 }
5644
57- public void SwitchToProvider ( string key )
58- => _dataProvider = _dataProviders [ key ] ;
45+ /// <summary>
46+ /// <inheritdoc cref="IDataProvider.Name"/> NOTE We assume only one Aggregate provider, so
47+ /// the name is static.
48+ /// </summary>
49+ public string Name => nameof ( AggregateDataProvider ) ;
5950
60- public IEnumerable < string > Keys => _dataProviders . Keys ;
51+ /// <summary>
52+ /// If there is only one data provider, this is it. If there are multiple, this is the
53+ /// current data provider.
54+ /// </summary>
55+ public IDataProvider SelectedDataProvider => _selectedDataProvider ;
6156
62- #region Delegating members of IDataProvider
57+ public void SwitchToProvider ( string key ) => _selectedDataProvider = _dataProviders [ key ] ;
6358
64- public async Task < ( IEnumerable < LogModel > , int ) > FetchDataAsync ( int page , int count , string level = null , string searchCriteria = null , DateTime ? startDate = null , DateTime ? endDate = null )
59+ public IEnumerable < string > Keys => _dataProviders . Keys ;
60+
61+ public async Task < ( IEnumerable < LogModel > , int ) > FetchDataAsync (
62+ int page ,
63+ int count ,
64+ string level = null ,
65+ string searchCriteria = null ,
66+ DateTime ? startDate = null ,
67+ DateTime ? endDate = null )
6568 {
66- return await DataProvider . FetchDataAsync ( page , count , level , searchCriteria , startDate , endDate ) ;
69+ return await SelectedDataProvider . FetchDataAsync ( page , count , level , searchCriteria , startDate , endDate ) ;
6770 }
68-
69- #endregion
70-
7171 }
7272}
0 commit comments