@@ -15,50 +15,35 @@ public static class IServiceProviderExtensions
15
15
{
16
16
static IUIProvider cachedUIProvider = null ;
17
17
18
- public static T TryGetService < T > ( this IServiceProvider serviceProvider ) where T : class
19
- {
20
- return serviceProvider . TryGetService ( typeof ( T ) ) as T ;
21
- }
22
-
23
18
public static object TryGetService ( this IServiceProvider serviceProvider , Type type )
24
19
{
25
20
if ( cachedUIProvider != null && type == typeof ( IUIProvider ) )
26
21
return cachedUIProvider ;
27
22
28
23
var ui = serviceProvider as IUIProvider ;
29
- if ( ui != null )
30
- return ui . TryGetService ( type ) ;
31
- else
32
- {
33
- try
34
- {
35
- return GetServiceAndCache ( serviceProvider , type , ref cachedUIProvider ) ;
36
- }
37
- catch ( Exception ex )
38
- {
39
- Debug . Print ( ex . ToString ( ) ) ;
40
- }
41
- return null ;
42
- }
24
+ return ui != null
25
+ ? ui . TryGetService ( type )
26
+ : GetServiceAndCache ( serviceProvider , type , ref cachedUIProvider ) ;
43
27
}
44
-
45
- public static T GetService < T > ( this IServiceProvider serviceProvider )
28
+ public static T GetExportedValue < T > ( this IServiceProvider serviceProvider ) where T : class
46
29
{
47
30
if ( cachedUIProvider != null && typeof ( T ) == typeof ( IUIProvider ) )
48
31
return ( T ) cachedUIProvider ;
49
32
50
- return ( T ) GetServiceAndCache ( serviceProvider , typeof ( T ) , ref cachedUIProvider ) ;
33
+ var ui = serviceProvider as IUIProvider ;
34
+ return ui != null
35
+ ? ui . TryGetService ( typeof ( T ) ) as T
36
+ : GetExportedValueAndCache < T , IUIProvider > ( ref cachedUIProvider ) ;
51
37
}
52
38
53
- public static T GetExportedValue < T > ( this IServiceProvider serviceProvider )
39
+ public static T TryGetService < T > ( this IServiceProvider serviceProvider ) where T : class
54
40
{
55
- if ( cachedUIProvider != null && typeof ( T ) == typeof ( IUIProvider ) )
56
- return ( T ) cachedUIProvider ;
41
+ return serviceProvider . TryGetService ( typeof ( T ) ) as T ;
42
+ }
57
43
58
- var ui = serviceProvider as IUIProvider ;
59
- return ui != null
60
- ? ui . GetService < T > ( )
61
- : GetExportedValueAndCache < T , IUIProvider > ( ref cachedUIProvider ) ;
44
+ public static T GetService < T > ( this IServiceProvider serviceProvider ) where T : class
45
+ {
46
+ return serviceProvider . TryGetService ( typeof ( T ) ) as T ;
62
47
}
63
48
64
49
public static ITeamExplorerSection GetSection ( this IServiceProvider serviceProvider , Guid section )
@@ -68,18 +53,27 @@ public static ITeamExplorerSection GetSection(this IServiceProvider serviceProvi
68
53
69
54
static object GetServiceAndCache < CacheType > ( IServiceProvider provider , Type type , ref CacheType cache )
70
55
{
71
- var ret = provider . GetService ( type ) ;
72
- if ( type == typeof ( CacheType ) )
56
+ object ret = null ;
57
+ try
58
+ {
59
+ ret = provider . GetService ( type ) ;
60
+ }
61
+ catch ( Exception ex )
62
+ {
63
+ Debug . Print ( ex . ToString ( ) ) ;
64
+ VisualStudio . VsOutputLogger . WriteLine ( "GetServiceAndCache: Could not obtain instance of '{0}'" , type ) ;
65
+ }
66
+ if ( ret != null && type == typeof ( CacheType ) )
73
67
cache = ( CacheType ) ret ;
74
68
return ret ;
75
69
}
76
70
77
- static T GetExportedValueAndCache < T , CacheType > ( ref CacheType cache )
71
+ static T GetExportedValueAndCache < T , CacheType > ( ref CacheType cache ) where T : class
78
72
{
79
- var ret = VisualStudio . Services . ComponentModel . DefaultExportProvider . GetExportedValue < T > ( ) ;
80
- if ( typeof ( T ) == typeof ( CacheType ) )
81
- cache = ( CacheType ) ( object ) ret ;
82
- return ret ;
73
+ object ret = VisualStudio . Services . ComponentModel . DefaultExportProvider . GetExportedValueOrDefault < T > ( ) ;
74
+ if ( ret != null && typeof ( T ) == typeof ( CacheType ) )
75
+ cache = ( CacheType ) ret ;
76
+ return ret as T ;
83
77
}
84
78
85
79
public static void AddTopLevelMenuItem ( this IServiceProvider provider ,
0 commit comments