1
- using GitHub . Services ;
2
- using Microsoft . TeamFoundation . Controls ;
1
+ using Microsoft . TeamFoundation . Controls ;
3
2
using System ;
4
3
using System . Diagnostics ;
5
4
6
5
namespace GitHub . Extensions
7
6
{
7
+ using Services ;
8
8
using VisualStudio ;
9
9
10
10
public static class VSExtensions
11
11
{
12
+ static IUIProvider uiProvider = null ;
13
+
12
14
public static T TryGetService < T > ( this IServiceProvider serviceProvider ) where T : class
13
15
{
14
16
return serviceProvider . TryGetService ( typeof ( T ) ) as T ;
15
17
}
16
18
17
19
public static object TryGetService ( this IServiceProvider serviceProvider , Type type )
18
20
{
21
+ var isRequestingMainProvider = type == typeof ( IUIProvider ) ;
22
+ if ( uiProvider != null && isRequestingMainProvider )
23
+ return uiProvider ;
24
+
19
25
var ui = serviceProvider as IUIProvider ;
20
26
if ( ui != null )
21
27
return ui . TryGetService ( type ) ;
22
28
else
23
29
{
24
30
try
25
31
{
26
- return serviceProvider . GetService ( type ) ;
32
+ var ret = serviceProvider . GetService ( type ) ;
33
+ if ( isRequestingMainProvider )
34
+ uiProvider = ret as IUIProvider ;
35
+ return ret ;
27
36
}
28
37
catch ( Exception ex )
29
38
{
@@ -35,15 +44,34 @@ public static object TryGetService(this IServiceProvider serviceProvider, Type t
35
44
36
45
public static T GetService < T > ( this IServiceProvider serviceProvider )
37
46
{
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 ;
39
57
}
40
58
41
59
public static T GetExportedValue < T > ( this IServiceProvider serviceProvider )
42
60
{
61
+ var isRequestingMainProvider = typeof ( T ) == typeof ( IUIProvider ) ;
62
+ if ( uiProvider != null && isRequestingMainProvider )
63
+ return ( T ) uiProvider ;
64
+
43
65
var ui = serviceProvider as IUIProvider ;
44
66
if ( ui != null )
45
67
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
+ }
47
75
}
48
76
49
77
public static ITeamExplorerSection GetSection ( this IServiceProvider serviceProvider , Guid section )
0 commit comments