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

Commit b802bc9

Browse files
committed
Merge branch 'master' into refactor/vs-commands
2 parents d4daa1e + a3c9291 commit b802bc9

File tree

6 files changed

+44
-149
lines changed

6 files changed

+44
-149
lines changed

src/GitHub.VisualStudio/GitHub.VisualStudio.csproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,6 @@
325325
<Compile Include="Services\ShowDialogService.cs" />
326326
<Compile Include="Services\UsageService.cs" />
327327
<Compile Include="Services\UsageTracker.cs" />
328-
<Compile Include="Services\LoginManagerDispatcher.cs" />
329-
<Compile Include="Services\UsageTrackerDispatcher.cs" />
330328
<Compile Include="Services\VSGitExtFactory.cs" />
331329
<Compile Include="Settings\Constants.cs" />
332330
<Compile Include="Services\ConnectionManager.cs" />

src/GitHub.VisualStudio/GitHubPackage.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Diagnostics;
55
using System.Reflection;
66
using System.Runtime.InteropServices;
7+
using System.ComponentModel.Composition;
78
using System.Threading;
89
using System.Threading.Tasks;
910
using System.Windows;
@@ -12,6 +13,7 @@
1213
using GitHub.Extensions;
1314
using GitHub.Helpers;
1415
using GitHub.Info;
16+
using GitHub.Exports;
1517
using GitHub.Logging;
1618
using GitHub.Services;
1719
using GitHub.Services.Vssdk.Commands;
@@ -99,6 +101,38 @@ async Task EnsurePackageLoaded(Guid packageGuid)
99101
}
100102
}
101103

104+
[PartCreationPolicy(CreationPolicy.Shared)]
105+
public class ServiceProviderExports
106+
{
107+
// Only export services for the Visual Studio process (they don't work in Expression Blend).
108+
const string ProcessName = "devenv";
109+
110+
readonly IServiceProvider serviceProvider;
111+
112+
[ImportingConstructor]
113+
public ServiceProviderExports([Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider)
114+
{
115+
this.serviceProvider = serviceProvider;
116+
}
117+
118+
[ExportForProcess(typeof(ILoginManager), ProcessName)]
119+
public ILoginManager LoginManager => GetService<ILoginManager>();
120+
121+
[ExportForProcess(typeof(IMenuProvider), ProcessName)]
122+
public IMenuProvider MenuProvider => GetService<IMenuProvider>();
123+
124+
[ExportForProcess(typeof(IGitHubServiceProvider), ProcessName)]
125+
public IGitHubServiceProvider GitHubServiceProvider => GetService<IGitHubServiceProvider>();
126+
127+
[ExportForProcess(typeof(IUsageTracker), ProcessName)]
128+
public IUsageTracker UsageTracker => GetService<IUsageTracker>();
129+
130+
[ExportForProcess(typeof(IVSGitExt), ProcessName)]
131+
public IVSGitExt VSGitExt => GetService<IVSGitExt>();
132+
133+
T GetService<T>() => (T)serviceProvider.GetService(typeof(T));
134+
}
135+
102136
[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
103137
[ProvideService(typeof(ILoginManager), IsAsyncQueryable = true)]
104138
[ProvideService(typeof(IGitHubServiceProvider), IsAsyncQueryable = true)]
@@ -221,7 +255,7 @@ async Task<object> CreateService(IAsyncServiceContainer container, CancellationT
221255
else if (serviceType == typeof(IVSGitExt))
222256
{
223257
var vsVersion = ApplicationInfo.GetHostVersionInfo().FileMajorPart;
224-
return VSGitExtFactory.Create(vsVersion, this);
258+
return new VSGitExtFactory(vsVersion, this).Create();
225259
}
226260
else if (serviceType == typeof(IGitHubToolWindowManager))
227261
{

src/GitHub.VisualStudio/Services/GitHubServiceProvider.cs

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -21,58 +21,6 @@
2121

2222
namespace GitHub.VisualStudio
2323
{
24-
/// <summary>
25-
/// This is a thin MEF wrapper around the GitHubServiceProvider
26-
/// which is registered as a global VS service. This class just
27-
/// redirects every request to the actual service, and can be
28-
/// thrown away as soon as the caller is done (no state is kept)
29-
/// </summary>
30-
[ExportForProcess(typeof(IGitHubServiceProvider), "devenv")]
31-
[PartCreationPolicy(CreationPolicy.NonShared)]
32-
public class GitHubProviderDispatcher : IGitHubServiceProvider
33-
{
34-
readonly IGitHubServiceProvider theRealProvider;
35-
36-
[ImportingConstructor]
37-
public GitHubProviderDispatcher([Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider)
38-
{
39-
theRealProvider = serviceProvider.GetService(typeof(IGitHubServiceProvider)) as IGitHubServiceProvider;
40-
}
41-
42-
public ExportProvider ExportProvider => theRealProvider.ExportProvider;
43-
44-
public IServiceProvider GitServiceProvider
45-
{
46-
get
47-
{
48-
return theRealProvider.GitServiceProvider;
49-
}
50-
51-
set
52-
{
53-
theRealProvider.GitServiceProvider = value;
54-
}
55-
}
56-
57-
public void AddService(Type t, object owner, object instance) => theRealProvider.AddService(t, owner, instance);
58-
59-
public void AddService<T>(object owner, T instance) where T : class => theRealProvider.AddService(owner, instance);
60-
61-
public T GetService<T>() where T : class => theRealProvider.GetService<T>();
62-
63-
public object GetService(Type serviceType) => theRealProvider.GetService(serviceType);
64-
65-
public Ret GetService<T, Ret>() where T : class where Ret : class => theRealProvider.GetService<T, Ret>();
66-
67-
public void RemoveService(Type t, object owner) => theRealProvider.RemoveService(t, owner);
68-
69-
public object TryGetService(string typename) => theRealProvider.TryGetService(typename);
70-
71-
public object TryGetService(Type t) => theRealProvider.TryGetService(t);
72-
73-
public T TryGetService<T>() where T : class => theRealProvider.TryGetService<T>();
74-
}
75-
7624
/// <summary>
7725
/// This is a globally registered service (see `GitHubPackage`).
7826
/// If you need to access this service via MEF, use the `IGitHubServiceProvider` type

src/GitHub.VisualStudio/Services/LoginManagerDispatcher.cs

Lines changed: 0 additions & 56 deletions
This file was deleted.

src/GitHub.VisualStudio/Services/UsageTrackerDispatcher.cs

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/GitHub.VisualStudio/Services/VSGitExtFactory.cs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
extern alias TF15;
33

44
using System;
5-
using System.ComponentModel.Composition;
6-
using GitHub.Info;
75
using GitHub.Logging;
86
using Serilog;
97
using Microsoft.VisualStudio.Shell;
@@ -12,25 +10,27 @@
1210

1311
namespace GitHub.Services
1412
{
15-
[PartCreationPolicy(CreationPolicy.Shared)]
1613
public class VSGitExtFactory
1714
{
1815
static readonly ILogger log = LogManager.ForContext<VSGitExtFactory>();
1916

20-
[ImportingConstructor]
21-
public VSGitExtFactory(IGitHubServiceProvider serviceProvider)
17+
readonly int vsVersion;
18+
readonly IAsyncServiceProvider asyncServiceProvider;
19+
20+
public VSGitExtFactory(int vsVersion, IAsyncServiceProvider asyncServiceProvider)
2221
{
23-
VSGitExt = serviceProvider.GetService<IVSGitExt>();
22+
this.vsVersion = vsVersion;
23+
this.asyncServiceProvider = asyncServiceProvider;
2424
}
2525

26-
public static IVSGitExt Create(int vsVersion, IAsyncServiceProvider sp)
26+
public IVSGitExt Create()
2727
{
2828
switch (vsVersion)
2929
{
3030
case 14:
31-
return Create(() => new VSGitExt14(sp));
31+
return Create(() => new VSGitExt14(asyncServiceProvider));
3232
case 15:
33-
return Create(() => new VSGitExt15(sp));
33+
return Create(() => new VSGitExt15(asyncServiceProvider));
3434
default:
3535
log.Error("There is no IVSGitExt implementation for DTE version {Version}", vsVersion);
3636
return null;
@@ -40,8 +40,5 @@ public static IVSGitExt Create(int vsVersion, IAsyncServiceProvider sp)
4040
// NOTE: We're being careful to only reference VSGitExt14 and VSGitExt15 from inside a lambda expression.
4141
// This ensures that only the type that's compatible with the running DTE version is loaded.
4242
static IVSGitExt Create(Func<IVSGitExt> factory) => factory.Invoke();
43-
44-
[Export]
45-
public IVSGitExt VSGitExt { get; }
4643
}
4744
}

0 commit comments

Comments
 (0)