@@ -21,24 +21,28 @@ namespace Coverlet.Collector.DataCollection
2121 public class CoverletCoverageCollector : DataCollector
2222 {
2323 private readonly TestPlatformEqtTrace _eqtTrace ;
24+ private readonly ICoverageWrapper _coverageWrapper ;
25+ private readonly ICountDownEventFactory _countDownEventFactory ;
26+ private readonly Func < TestPlatformEqtTrace , TestPlatformLogger , string , IServiceCollection > _serviceCollectionFactory ;
27+
2428 private DataCollectionEvents _events ;
2529 private TestPlatformLogger _logger ;
2630 private XmlElement _configurationElement ;
2731 private DataCollectionSink _dataSink ;
2832 private DataCollectionContext _dataCollectionContext ;
2933 private CoverageManager _coverageManager ;
30- private ICoverageWrapper _coverageWrapper ;
31- private ICountDownEventFactory _countDownEventFactory ;
34+ private IServiceProvider _serviceProvider ;
3235
33- public CoverletCoverageCollector ( ) : this ( new TestPlatformEqtTrace ( ) , new CoverageWrapper ( ) , new CollectorCountdownEventFactory ( ) )
36+ public CoverletCoverageCollector ( ) : this ( new TestPlatformEqtTrace ( ) , new CoverageWrapper ( ) , new CollectorCountdownEventFactory ( ) , GetDefaultServiceCollection )
3437 {
3538 }
3639
37- internal CoverletCoverageCollector ( TestPlatformEqtTrace eqtTrace , ICoverageWrapper coverageWrapper , ICountDownEventFactory countDownEventFactory ) : base ( )
40+ internal CoverletCoverageCollector ( TestPlatformEqtTrace eqtTrace , ICoverageWrapper coverageWrapper , ICountDownEventFactory countDownEventFactory , Func < TestPlatformEqtTrace , TestPlatformLogger , string , IServiceCollection > serviceCollectionFactory ) : base ( )
3841 {
3942 _eqtTrace = eqtTrace ;
4043 _coverageWrapper = coverageWrapper ;
4144 _countDownEventFactory = countDownEventFactory ;
45+ _serviceCollectionFactory = serviceCollectionFactory ;
4246 }
4347
4448 private void AttachDebugger ( )
@@ -79,7 +83,6 @@ public override void Initialize(
7983 _dataSink = dataSink ;
8084 _dataCollectionContext = environmentContext . SessionDataCollectionContext ;
8185 _logger = new TestPlatformLogger ( logger , _dataCollectionContext ) ;
82- DependencyInjection . Set ( GetServiceProvider ( _eqtTrace , _logger ) ) ;
8386
8487 // Register events
8588 _events . SessionStart += OnSessionStart ;
@@ -125,8 +128,13 @@ private void OnSessionStart(object sender, SessionStartEventArgs sessionStartEve
125128 var coverletSettingsParser = new CoverletSettingsParser ( _eqtTrace ) ;
126129 CoverletSettings coverletSettings = coverletSettingsParser . Parse ( _configurationElement , testModules ) ;
127130
131+ // Build services container
132+ _serviceProvider = _serviceCollectionFactory ( _eqtTrace , _logger , coverletSettings . TestModule ) . BuildServiceProvider ( ) ;
133+
128134 // Get coverage and attachment managers
129- _coverageManager = new CoverageManager ( coverletSettings , _eqtTrace , _logger , _coverageWrapper ) ;
135+ _coverageManager = new CoverageManager ( coverletSettings , _eqtTrace , _logger , _coverageWrapper ,
136+ _serviceProvider . GetRequiredService < IInstrumentationHelper > ( ) , _serviceProvider . GetRequiredService < IFileSystem > ( ) ,
137+ _serviceProvider . GetRequiredService < ISourceRootTranslator > ( ) ) ;
130138
131139 // Instrument modules
132140 _coverageManager . InstrumentModules ( ) ;
@@ -209,18 +217,18 @@ private static IEnumerable<string> GetPropertyValueWrapper(SessionStartEventArgs
209217 return sessionStartEventArgs . GetPropertyValue < IEnumerable < string > > ( CoverletConstants . TestSourcesPropertyName ) ;
210218 }
211219
212- private static IServiceProvider GetServiceProvider ( TestPlatformEqtTrace eqtTrace , TestPlatformLogger logger )
220+ private static IServiceCollection GetDefaultServiceCollection ( TestPlatformEqtTrace eqtTrace , TestPlatformLogger logger , string testModule )
213221 {
214222 IServiceCollection serviceCollection = new ServiceCollection ( ) ;
215223 serviceCollection . AddTransient < IRetryHelper , RetryHelper > ( ) ;
216224 serviceCollection . AddTransient < IProcessExitHandler , ProcessExitHandler > ( ) ;
217225 serviceCollection . AddTransient < IFileSystem , FileSystem > ( ) ;
218226 serviceCollection . AddTransient < ILogger , CoverletLogger > ( _ => new CoverletLogger ( eqtTrace , logger ) ) ;
219-
220227 // We need to keep singleton/static semantics
221228 serviceCollection . AddSingleton < IInstrumentationHelper , InstrumentationHelper > ( ) ;
222-
223- return serviceCollection . BuildServiceProvider ( ) ;
229+ // We cache resolutions
230+ serviceCollection . AddSingleton < ISourceRootTranslator , SourceRootTranslator > ( serviceProvider => new SourceRootTranslator ( testModule , serviceProvider . GetRequiredService < ILogger > ( ) , serviceProvider . GetRequiredService < IFileSystem > ( ) ) ) ;
231+ return serviceCollection ;
224232 }
225233 }
226234}
0 commit comments