@@ -26,11 +26,18 @@ namespace Pure.DI.MS
2626 [ global ::System . CodeDom . Compiler . GeneratedCode ( "Pure.DI" , "" ) ]
2727 [ global ::System . Diagnostics . CodeAnalysis . ExcludeFromCodeCoverage ]
2828#endif
29- public class ServiceCollectionFactory < TComposition >
29+ public class ServiceCollectionFactory <
30+ #if NET5_0_OR_GREATER || NET
31+ [ global ::System . Diagnostics . CodeAnalysis . DynamicallyAccessedMembers ( global ::System . Diagnostics . CodeAnalysis . DynamicallyAccessedMemberTypes . PublicConstructors | global ::System . Diagnostics . CodeAnalysis . DynamicallyAccessedMemberTypes . NonPublicConstructors ) ]
32+ #endif
33+ TComposition >
3034 {
3135 private static readonly Func < TComposition , InstanceResolver , ServiceDescriptor > ServiceDescriptorProvider ;
3236 private static readonly Func < TComposition , TComposition > ScopeFactory ;
3337
38+ #if NET5_0_OR_GREATER || NET
39+ [ global ::System . Diagnostics . CodeAnalysis . UnconditionalSuppressMessage ( "ReflectionAnalysis" , "IL2111" , Justification = "The reflection lookup is used only to detect the optional keyed ServiceDescriptor constructor when the referenced Microsoft DI assembly provides it." ) ]
40+ #endif
3441 static ServiceCollectionFactory ( )
3542 {
3643 var scopeConstructor = typeof ( TComposition ) . GetConstructor (
@@ -64,11 +71,14 @@ from ctor in typeof(ServiceDescriptor).GetConstructors(BindingFlags.Instance | B
6471 var compositionParameter = Expression . Parameter ( typeof ( TComposition ) ) ;
6572 var resolverParameter = Expression . Parameter ( typeof ( InstanceResolver ) ) ;
6673 var serviceProviderParameter = Expression . Parameter ( typeof ( IServiceProvider ) ) ;
74+ var typeField = typeof ( InstanceResolver ) . GetField ( nameof ( InstanceResolver . Type ) ) ;
75+ var tagField = typeof ( InstanceResolver ) . GetField ( nameof ( InstanceResolver . Tag ) ) ;
76+ var lifetimeField = typeof ( InstanceResolver ) . GetField ( nameof ( InstanceResolver . Lifetime ) ) ;
6777 ServiceDescriptorProvider = Expression . Lambda < Func < TComposition , InstanceResolver , ServiceDescriptor > > (
6878 Expression . New (
6979 ctorWithTag ,
70- Expression . Field ( resolverParameter , nameof ( InstanceResolver . Type ) ) ,
71- Expression . Field ( resolverParameter , nameof ( InstanceResolver . Tag ) ) ,
80+ Expression . Field ( resolverParameter , typeField ) ,
81+ Expression . Field ( resolverParameter , tagField ) ,
7282 Expression . Lambda (
7383 resolverType ,
7484 Expression . Call (
@@ -78,7 +88,7 @@ from ctor in typeof(ServiceDescriptor).GetConstructors(BindingFlags.Instance | B
7888 serviceProviderParameter ) ,
7989 serviceProviderParameter ,
8090 Expression . Parameter ( typeof ( object ) ) ) ,
81- Expression . Field ( resolverParameter , nameof ( InstanceResolver . Lifetime ) ) ) ,
91+ Expression . Field ( resolverParameter , lifetimeField ) ) ,
8292 compositionParameter ,
8393 resolverParameter )
8494 . Compile ( ) ;
0 commit comments