Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit bd5c747

Browse files
committed
Merge branch 'spike/zero-impact-2019' into appveyor-build-zero-impact
2 parents 1bb5d2d + 171446e commit bd5c747

File tree

3 files changed

+46
-26
lines changed

3 files changed

+46
-26
lines changed

src/GitHub.VisualStudio.16/CompositionServices.cs

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using GitHub.Factories;
1212
using GitHub.Models;
1313
using GitHub.Services;
14+
using GitHub.VisualStudio.Settings;
1415
using GitHub.VisualStudio.Views;
1516
using GitHub.VisualStudio.Views.Dialog.Clone;
1617
using 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) { }

src/GitHub.VisualStudio.16/InBoxExtensionServices.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ static async Task<CloneDialogResult> ShowCloneDialogAsync(IComponentModel compon
7070
IProgress<ServiceProgressData> downloadProgress, CancellationToken cancellationToken, string url = null)
7171
{
7272
var compositionServices = new CompositionServices();
73-
var compositionContainer = compositionServices.CreateCompositionContainer(componentModel.DefaultExportProvider);
73+
var compositionContainer = compositionServices.CreateVisualStudioCompositionContainer(componentModel.DefaultExportProvider);
7474

7575
var dialogService = compositionContainer.GetExportedValue<IDialogService>();
7676
var cloneDialogResult = await dialogService.ShowCloneDialog(null, url);

src/GitHub.VisualStudio.TestApp/MainWindow.xaml.cs

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -71,30 +71,12 @@ async Task CloneOrOpenRepositoryAsync()
7171
CompositionContainer CreateCompositionContainer()
7272
{
7373
var compositionServices = new CompositionServices();
74-
var exports = CreateOutOfProcExports();
75-
var compositionContainer = compositionServices.CreateCompositionContainer(exports);
74+
var compositionContainer = compositionServices.CreateOutOfProcCompositionContainer();
7675

7776
var gitHubServiceProvider = compositionContainer.GetExportedValue<IGitHubServiceProvider>();
7877
var externalShowDialogService = new ExternalShowDialogService(gitHubServiceProvider, this);
7978
compositionContainer.ComposeExportedValue<IShowDialogService>(externalShowDialogService);
8079
return compositionContainer;
8180
}
82-
83-
static CompositionContainer CreateOutOfProcExports()
84-
{
85-
var container = new CompositionContainer();
86-
var serviceProvider = new MySVsServiceProvider();
87-
container.ComposeExportedValue<SVsServiceProvider>(serviceProvider);
88-
return container;
89-
}
90-
91-
class MySVsServiceProvider : SVsServiceProvider
92-
{
93-
public object GetService(Type serviceType)
94-
{
95-
Console.WriteLine($"GetService: {serviceType}");
96-
return null;
97-
}
98-
}
9981
}
10082
}

0 commit comments

Comments
 (0)