@@ -36,6 +36,10 @@ namespace QuantConnect.Lean.Engine
3636 /// </summary>
3737 public class LeanEngineAlgorithmHandlers : IDisposable
3838 {
39+ private static IFactorFileProvider _factorFileProvider ;
40+ private static IMapFileProvider _mapfileProvider ;
41+ private static IDataProvider _dataProvider ;
42+
3943 private bool _dataMonitorWired ;
4044
4145 /// <summary>
@@ -190,6 +194,37 @@ public LeanEngineAlgorithmHandlers(IResultHandler results,
190194 }
191195 }
192196
197+ /// <summary>
198+ /// Creates and initializes the auxiliary data providers from configuration
199+ /// </summary>
200+ public static ( IMapFileProvider , IFactorFileProvider , IDataProvider ) InitializeAuxiliaryDataProviders ( bool setGlobals = false )
201+ {
202+ if ( _mapfileProvider != null )
203+ {
204+ Log . Trace ( "LeanEngineAlgorithmHandlers.InitializeAuxiliaryDataProviders(): reusing existing instances" ) ;
205+ return ( _mapfileProvider , _factorFileProvider , _dataProvider ) ;
206+ }
207+
208+ var mapFileProviderTypeName = Config . Get ( "map-file-provider" , "LocalDiskMapFileProvider" ) ;
209+ var factorFileProviderTypeName = Config . Get ( "factor-file-provider" , "LocalDiskFactorFileProvider" ) ;
210+ var dataProviderTypeName = Config . Get ( "data-provider" , "DefaultDataProvider" ) ;
211+
212+ var mapFileProvider = Composer . Instance . GetExportedValueByTypeName < IMapFileProvider > ( mapFileProviderTypeName ) ;
213+ var factorFileProvider = Composer . Instance . GetExportedValueByTypeName < IFactorFileProvider > ( factorFileProviderTypeName ) ;
214+ var dataProvider = Composer . Instance . GetExportedValueByTypeName < IDataProvider > ( dataProviderTypeName ) ;
215+
216+ factorFileProvider . Initialize ( mapFileProvider , dataProvider ) ;
217+ mapFileProvider . Initialize ( dataProvider ) ;
218+
219+ if ( setGlobals )
220+ {
221+ _mapfileProvider = mapFileProvider ;
222+ _factorFileProvider = factorFileProvider ;
223+ _dataProvider = dataProvider ;
224+ }
225+ return ( mapFileProvider , factorFileProvider , dataProvider ) ;
226+ }
227+
193228 /// <summary>
194229 /// Creates a new instance of the <see cref="LeanEngineAlgorithmHandlers"/> class from the specified composer using type names from configuration
195230 /// </summary>
@@ -199,14 +234,12 @@ public LeanEngineAlgorithmHandlers(IResultHandler results,
199234 /// <exception cref="CompositionException">Throws a CompositionException during failure to load</exception>
200235 public static LeanEngineAlgorithmHandlers FromConfiguration ( Composer composer , bool researchMode = false )
201236 {
237+ var ( mapFileProvider , factorFileProvider , dataProvider ) = InitializeAuxiliaryDataProviders ( ) ;
202238 var setupHandlerTypeName = Config . Get ( "setup-handler" , "ConsoleSetupHandler" ) ;
203239 var transactionHandlerTypeName = Config . Get ( "transaction-handler" , "BacktestingTransactionHandler" ) ;
204240 var realTimeHandlerTypeName = Config . Get ( "real-time-handler" , "BacktestingRealTimeHandler" ) ;
205241 var dataFeedHandlerTypeName = Config . Get ( "data-feed-handler" , "FileSystemDataFeed" ) ;
206242 var resultHandlerTypeName = Config . Get ( "result-handler" , "BacktestingResultHandler" ) ;
207- var mapFileProviderTypeName = Config . Get ( "map-file-provider" , "LocalDiskMapFileProvider" ) ;
208- var factorFileProviderTypeName = Config . Get ( "factor-file-provider" , "LocalDiskFactorFileProvider" ) ;
209- var dataProviderTypeName = Config . Get ( "data-provider" , "DefaultDataProvider" ) ;
210243 var objectStoreTypeName = Config . Get ( "object-store" , "LocalObjectStore" ) ;
211244 var dataPermissionManager = Config . Get ( "data-permission-manager" , "DataPermissionManager" ) ;
212245 var dataMonitor = Config . Get ( "data-monitor" , "QuantConnect.Data.DataMonitor" ) ;
@@ -217,9 +250,9 @@ public static LeanEngineAlgorithmHandlers FromConfiguration(Composer composer, b
217250 composer . GetExportedValueByTypeName < IDataFeed > ( dataFeedHandlerTypeName ) ,
218251 composer . GetExportedValueByTypeName < ITransactionHandler > ( transactionHandlerTypeName ) ,
219252 composer . GetExportedValueByTypeName < IRealTimeHandler > ( realTimeHandlerTypeName ) ,
220- composer . GetExportedValueByTypeName < IMapFileProvider > ( mapFileProviderTypeName ) ,
221- composer . GetExportedValueByTypeName < IFactorFileProvider > ( factorFileProviderTypeName ) ,
222- composer . GetExportedValueByTypeName < IDataProvider > ( dataProviderTypeName ) ,
253+ mapFileProvider ,
254+ factorFileProvider ,
255+ dataProvider ,
223256 composer . GetExportedValueByTypeName < IObjectStore > ( objectStoreTypeName ) ,
224257 composer . GetExportedValueByTypeName < IDataPermissionManager > ( dataPermissionManager ) ,
225258 Globals . LiveMode ,
0 commit comments