1111using GitHub . Factories ;
1212using GitHub . Models ;
1313using GitHub . Services ;
14+ using GitHub . VisualStudio . Settings ;
1415using GitHub . VisualStudio . Views ;
1516using GitHub . VisualStudio . Views . Dialog . Clone ;
1617using Microsoft . VisualStudio . Shell ;
@@ -21,7 +22,38 @@ namespace GitHub.VisualStudio
2122{
2223 public class CompositionServices
2324 {
24- public CompositionContainer CreateCompositionContainer ( ExportProvider defaultExportProvider )
25+ public CompositionContainer CreateVisualStudioCompositionContainer ( ExportProvider defaultExportProvider )
26+ {
27+ var compositionContainer = CreateCompositionContainer ( defaultExportProvider ) ;
28+
29+ var gitHubServiceProvider = compositionContainer . GetExportedValue < IGitHubServiceProvider > ( ) ;
30+ var packageSettings = new PackageSettings ( gitHubServiceProvider ) ;
31+ var usageService = compositionContainer . GetExportedValue < IUsageService > ( ) ;
32+ var usageTracker = new UsageTracker ( gitHubServiceProvider , usageService , packageSettings ) ;
33+ compositionContainer . ComposeExportedValue < IUsageTracker > ( usageTracker ) ;
34+
35+ return compositionContainer ;
36+ }
37+
38+ public CompositionContainer CreateOutOfProcCompositionContainer ( )
39+ {
40+ var compositionContainer = CreateCompositionContainer ( CreateOutOfProcExports ( ) ) ;
41+
42+ var usageTracker = new OutOfProcUsageTracker ( ) ;
43+ compositionContainer . ComposeExportedValue < IUsageTracker > ( usageTracker ) ;
44+
45+ return compositionContainer ;
46+ }
47+
48+ static CompositionContainer CreateOutOfProcExports ( )
49+ {
50+ var container = new CompositionContainer ( ) ;
51+ var serviceProvider = new OutOfProcSVsServiceProvider ( ) ;
52+ container . ComposeExportedValue < SVsServiceProvider > ( serviceProvider ) ;
53+ return container ;
54+ }
55+
56+ static CompositionContainer CreateCompositionContainer ( ExportProvider defaultExportProvider )
2557 {
2658 var catalog = new LoggingCatalog (
2759 GetCatalog ( typeof ( DialogService ) . Assembly ) , // GitHub.App
@@ -39,9 +71,6 @@ public CompositionContainer CreateCompositionContainer(ExportProvider defaultExp
3971 var gitHubServiceProvider = new MyGitHubServiceProvider ( compositionContainer ) ;
4072 compositionContainer . ComposeExportedValue < IGitHubServiceProvider > ( gitHubServiceProvider ) ;
4173
42- var usageTracker = new MyUsageTracker ( ) ;
43- compositionContainer . ComposeExportedValue < IUsageTracker > ( usageTracker ) ;
44-
4574 var loginManager = CreateLoginManager ( compositionContainer ) ;
4675 compositionContainer . ComposeExportedValue < ILoginManager > ( loginManager ) ;
4776
@@ -58,7 +87,7 @@ static void InitializeViewLocator(IViewViewModelFactory viewViewModelFactory)
5887 factoryProviderFiled . SetValue ( null , viewViewModelFactory ) ;
5988 }
6089
61- private static LoginManager CreateLoginManager ( CompositionContainer compositionContainer )
90+ static LoginManager CreateLoginManager ( CompositionContainer compositionContainer )
6291 {
6392 var keychain = compositionContainer . GetExportedValue < IKeychain > ( ) ;
6493 var lazy2Fa = new Lazy < ITwoFactorChallengeHandler > ( ( ) => compositionContainer . GetExportedValue < ITwoFactorChallengeHandler > ( ) ) ;
@@ -185,7 +214,7 @@ public object TryGetService(string typeName)
185214 public ExportProvider ExportProvider { get ; }
186215 }
187216
188- public class MyUsageTracker : IUsageTracker
217+ public class OutOfProcUsageTracker : IUsageTracker
189218 {
190219 public Task IncrementCounter ( Expression < Func < UsageModel . MeasuresModel , int > > counter )
191220 {
@@ -194,6 +223,15 @@ public Task IncrementCounter(Expression<Func<UsageModel.MeasuresModel, int>> cou
194223 }
195224 }
196225
226+ class OutOfProcSVsServiceProvider : SVsServiceProvider
227+ {
228+ public object GetService ( Type serviceType )
229+ {
230+ Console . WriteLine ( $ "GetService: { serviceType } ") ;
231+ return null ;
232+ }
233+ }
234+
197235 public class LoggingCatalog : AggregateCatalog
198236 {
199237 public LoggingCatalog ( params ComposablePartCatalog [ ] catalogs ) : base ( catalogs ) { }
0 commit comments