@@ -15,50 +15,35 @@ public static class IServiceProviderExtensions
1515 {
1616 static IUIProvider cachedUIProvider = null ;
1717
18- public static T TryGetService < T > ( this IServiceProvider serviceProvider ) where T : class
19- {
20- return serviceProvider . TryGetService ( typeof ( T ) ) as T ;
21- }
22-
2318 public static object TryGetService ( this IServiceProvider serviceProvider , Type type )
2419 {
2520 if ( cachedUIProvider != null && type == typeof ( IUIProvider ) )
2621 return cachedUIProvider ;
2722
2823 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 ) ;
4327 }
44-
45- public static T GetService < T > ( this IServiceProvider serviceProvider )
28+ public static T GetExportedValue < T > ( this IServiceProvider serviceProvider ) where T : class
4629 {
4730 if ( cachedUIProvider != null && typeof ( T ) == typeof ( IUIProvider ) )
4831 return ( T ) cachedUIProvider ;
4932
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 ) ;
5137 }
5238
53- public static T GetExportedValue < T > ( this IServiceProvider serviceProvider )
39+ public static T TryGetService < T > ( this IServiceProvider serviceProvider ) where T : class
5440 {
55- if ( cachedUIProvider != null && typeof ( T ) == typeof ( IUIProvider ) )
56- return ( T ) cachedUIProvider ;
41+ return serviceProvider . TryGetService ( typeof ( T ) ) as T ;
42+ }
5743
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 ;
6247 }
6348
6449 public static ITeamExplorerSection GetSection ( this IServiceProvider serviceProvider , Guid section )
@@ -68,18 +53,27 @@ public static ITeamExplorerSection GetSection(this IServiceProvider serviceProvi
6853
6954 static object GetServiceAndCache < CacheType > ( IServiceProvider provider , Type type , ref CacheType cache )
7055 {
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 ) )
7367 cache = ( CacheType ) ret ;
7468 return ret ;
7569 }
7670
77- static T GetExportedValueAndCache < T , CacheType > ( ref CacheType cache )
71+ static T GetExportedValueAndCache < T , CacheType > ( ref CacheType cache ) where T : class
7872 {
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 ;
8377 }
8478
8579 public static void AddTopLevelMenuItem ( this IServiceProvider provider ,
0 commit comments