@@ -21,24 +21,28 @@ namespace Coverlet.Collector.DataCollection
21
21
public class CoverletCoverageCollector : DataCollector
22
22
{
23
23
private readonly TestPlatformEqtTrace _eqtTrace ;
24
+ private readonly ICoverageWrapper _coverageWrapper ;
25
+ private readonly ICountDownEventFactory _countDownEventFactory ;
26
+ private readonly Func < TestPlatformEqtTrace , TestPlatformLogger , string , IServiceCollection > _serviceCollectionFactory ;
27
+
24
28
private DataCollectionEvents _events ;
25
29
private TestPlatformLogger _logger ;
26
30
private XmlElement _configurationElement ;
27
31
private DataCollectionSink _dataSink ;
28
32
private DataCollectionContext _dataCollectionContext ;
29
33
private CoverageManager _coverageManager ;
30
- private ICoverageWrapper _coverageWrapper ;
31
- private ICountDownEventFactory _countDownEventFactory ;
34
+ private IServiceProvider _serviceProvider ;
32
35
33
- public CoverletCoverageCollector ( ) : this ( new TestPlatformEqtTrace ( ) , new CoverageWrapper ( ) , new CollectorCountdownEventFactory ( ) )
36
+ public CoverletCoverageCollector ( ) : this ( new TestPlatformEqtTrace ( ) , new CoverageWrapper ( ) , new CollectorCountdownEventFactory ( ) , GetDefaultServiceCollection )
34
37
{
35
38
}
36
39
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 ( )
38
41
{
39
42
_eqtTrace = eqtTrace ;
40
43
_coverageWrapper = coverageWrapper ;
41
44
_countDownEventFactory = countDownEventFactory ;
45
+ _serviceCollectionFactory = serviceCollectionFactory ;
42
46
}
43
47
44
48
private void AttachDebugger ( )
@@ -79,7 +83,6 @@ public override void Initialize(
79
83
_dataSink = dataSink ;
80
84
_dataCollectionContext = environmentContext . SessionDataCollectionContext ;
81
85
_logger = new TestPlatformLogger ( logger , _dataCollectionContext ) ;
82
- DependencyInjection . Set ( GetServiceProvider ( _eqtTrace , _logger ) ) ;
83
86
84
87
// Register events
85
88
_events . SessionStart += OnSessionStart ;
@@ -125,8 +128,13 @@ private void OnSessionStart(object sender, SessionStartEventArgs sessionStartEve
125
128
var coverletSettingsParser = new CoverletSettingsParser ( _eqtTrace ) ;
126
129
CoverletSettings coverletSettings = coverletSettingsParser . Parse ( _configurationElement , testModules ) ;
127
130
131
+ // Build services container
132
+ _serviceProvider = _serviceCollectionFactory ( _eqtTrace , _logger , coverletSettings . TestModule ) . BuildServiceProvider ( ) ;
133
+
128
134
// 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 > ( ) ) ;
130
138
131
139
// Instrument modules
132
140
_coverageManager . InstrumentModules ( ) ;
@@ -209,18 +217,18 @@ private static IEnumerable<string> GetPropertyValueWrapper(SessionStartEventArgs
209
217
return sessionStartEventArgs . GetPropertyValue < IEnumerable < string > > ( CoverletConstants . TestSourcesPropertyName ) ;
210
218
}
211
219
212
- private static IServiceProvider GetServiceProvider ( TestPlatformEqtTrace eqtTrace , TestPlatformLogger logger )
220
+ private static IServiceCollection GetDefaultServiceCollection ( TestPlatformEqtTrace eqtTrace , TestPlatformLogger logger , string testModule )
213
221
{
214
222
IServiceCollection serviceCollection = new ServiceCollection ( ) ;
215
223
serviceCollection . AddTransient < IRetryHelper , RetryHelper > ( ) ;
216
224
serviceCollection . AddTransient < IProcessExitHandler , ProcessExitHandler > ( ) ;
217
225
serviceCollection . AddTransient < IFileSystem , FileSystem > ( ) ;
218
226
serviceCollection . AddTransient < ILogger , CoverletLogger > ( _ => new CoverletLogger ( eqtTrace , logger ) ) ;
219
-
220
227
// We need to keep singleton/static semantics
221
228
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 ;
224
232
}
225
233
}
226
234
}
0 commit comments