@@ -131,6 +131,11 @@ public static void SetDefault<TPolicyInterface>(this IPolicyList policies, TPoli
131131
132132 #region Get
133133
134+ public static T Get < T > ( this IPolicyList policies , Type type , string name , out IPolicyList list )
135+ {
136+ return ( T ) policies . Get ( type , name , typeof ( T ) , out list ) ;
137+ }
138+
134139 /// <summary>
135140 /// Gets an individual policy.
136141 /// </summary>
@@ -342,31 +347,11 @@ private static Tuple<Type, string> ParseBuildKey(object buildKey)
342347
343348 public static TPolicyInterface GetPolicy < TPolicyInterface > ( this IPolicyList list , INamedType buildKey , out IPolicyList containingPolicyList )
344349 {
345- return ( TPolicyInterface ) ( list . GetPolicyForKey ( typeof ( TPolicyInterface ) , buildKey , out containingPolicyList ) ??
346- list . GetPolicyForOpenType ( typeof ( TPolicyInterface ) , buildKey , buildKey . Type , out containingPolicyList ) ??
347- list . GetDefaultForPolicy ( typeof ( TPolicyInterface ) , out containingPolicyList ) ) ;
348- }
349-
350- private static IBuilderPolicy GetPolicyForOpenType ( this IPolicyList list , Type policyInterface , INamedType buildKey , Type buildType , out IPolicyList containingPolicyList )
351- {
352- containingPolicyList = null ;
353- if ( null == buildType ) return null ;
354-
355- if ( buildType . GetTypeInfo ( ) . IsGenericType )
356- {
357- var newType = buildType . GetGenericTypeDefinition ( ) ;
358- return list . Get ( newType , buildKey . Name , policyInterface , out containingPolicyList ) ??
359- list . Get ( newType , string . Empty , policyInterface , out containingPolicyList ) ;
360- }
361-
362- if ( buildType . IsArray && buildType . GetArrayRank ( ) == 1 )
363- {
364- return list . Get ( typeof ( Array ) , buildKey . Name , policyInterface , out containingPolicyList ) ??
365- list . Get ( typeof ( Array ) , string . Empty , policyInterface , out containingPolicyList ) ;
366- }
367-
368- return null ;
350+ return ( TPolicyInterface ) ( list . GetPolicyForKey ( typeof ( TPolicyInterface ) , buildKey , out containingPolicyList )
351+ ?? ( buildKey . Type . GetTypeInfo ( ) . IsGenericType
352+ ? list . Get ( buildKey . Type . GetGenericTypeDefinition ( ) , buildKey . Name , typeof ( TPolicyInterface ) , out containingPolicyList ) ??
353+ list . Get ( null , null , typeof ( TPolicyInterface ) , out containingPolicyList )
354+ : list . Get ( null , null , typeof ( TPolicyInterface ) , out containingPolicyList ) ) ) ;
369355 }
370-
371356 }
372357}
0 commit comments