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

Commit 419f35f

Browse files
committed
Cache the IUIProvider, no sense looking it up every time
1 parent 6fd69fd commit 419f35f

File tree

1 file changed

+33
-5
lines changed

1 file changed

+33
-5
lines changed

src/GitHub.Exports/Extensions/VSExtensions.cs

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,38 @@
1-
using GitHub.Services;
2-
using Microsoft.TeamFoundation.Controls;
1+
using Microsoft.TeamFoundation.Controls;
32
using System;
43
using System.Diagnostics;
54

65
namespace GitHub.Extensions
76
{
7+
using Services;
88
using VisualStudio;
99

1010
public static class VSExtensions
1111
{
12+
static IUIProvider uiProvider = null;
13+
1214
public static T TryGetService<T>(this IServiceProvider serviceProvider) where T : class
1315
{
1416
return serviceProvider.TryGetService(typeof(T)) as T;
1517
}
1618

1719
public static object TryGetService(this IServiceProvider serviceProvider, Type type)
1820
{
21+
var isRequestingMainProvider = type == typeof(IUIProvider);
22+
if (uiProvider != null && isRequestingMainProvider)
23+
return uiProvider;
24+
1925
var ui = serviceProvider as IUIProvider;
2026
if (ui != null)
2127
return ui.TryGetService(type);
2228
else
2329
{
2430
try
2531
{
26-
return serviceProvider.GetService(type);
32+
var ret = serviceProvider.GetService(type);
33+
if (isRequestingMainProvider)
34+
uiProvider = ret as IUIProvider;
35+
return ret;
2736
}
2837
catch (Exception ex)
2938
{
@@ -35,15 +44,34 @@ public static object TryGetService(this IServiceProvider serviceProvider, Type t
3544

3645
public static T GetService<T>(this IServiceProvider serviceProvider)
3746
{
38-
return (T)serviceProvider.GetService(typeof(T));
47+
var isRequestingMainProvider = typeof(T) == typeof(IUIProvider);
48+
if (uiProvider != null && isRequestingMainProvider)
49+
return (T)uiProvider;
50+
51+
var ret = serviceProvider.GetService(typeof(T));
52+
53+
if (isRequestingMainProvider)
54+
uiProvider = ret as IUIProvider;
55+
56+
return (T)ret;
3957
}
4058

4159
public static T GetExportedValue<T>(this IServiceProvider serviceProvider)
4260
{
61+
var isRequestingMainProvider = typeof(T) == typeof(IUIProvider);
62+
if (uiProvider != null && isRequestingMainProvider)
63+
return (T)uiProvider;
64+
4365
var ui = serviceProvider as IUIProvider;
4466
if (ui != null)
4567
return ui.GetService<T>();
46-
return Services.ComponentModel.DefaultExportProvider.GetExportedValue<T>();
68+
else
69+
{
70+
var ret = Services.ComponentModel.DefaultExportProvider.GetExportedValue<T>();
71+
if (isRequestingMainProvider)
72+
uiProvider = ret as IUIProvider;
73+
return (T)ret;
74+
}
4775
}
4876

4977
public static ITeamExplorerSection GetSection(this IServiceProvider serviceProvider, Guid section)

0 commit comments

Comments
 (0)