/// <summary> /// Static constructor to setup dynamic implementation /// </summary> static GraceDynamicMethod() { DynamicImplementation = DefaultImplementation.Clone(); DynamicImplementation.ExportSingleton <IDynamicMethodTargetCreator>(f => new DynamicMethodTargetCreator()); DynamicImplementation.ExportSingleton <INewExpressionGenerator>(f => new NewExpressionGenerator()); DynamicImplementation.ExportSingleton <IConstantExpressionCollector>(f => new ConstantExpressionCollector()); DynamicImplementation.ExportSingleton <IConstantExpressionGenerator>(f => new ConstantExpressionGenerator()); DynamicImplementation.ExportSingleton <IMemeberInitExpressionGenerator>(f => new MemeberInitExpressionGenerator()); DynamicImplementation.ExportSingleton <IArrayInitExpressionGenerator>(f => new ArrayInitExpressionGenerator()); DynamicImplementation.ExportSingleton <IParameterExpressionGenerator>(f => new ParameterExpressionGenerator()); DynamicImplementation.ExportSingleton <ICallExpressionGenerator>(f => new CallExpressionGenerator()); DynamicImplementation.ExportSingleton <IAssignExpressionGenerator>(f => new AssignExpressionGenerator()); DynamicImplementation.ExportInstance <ILinqToDynamicMethodConverter>(f => new LinqToDynamicMethodConverter(f)); DynamicImplementation.ExportInstance <IActivationStrategyCompiler>( f => new DynamicMethodStrategyCompiler(f.InjectionScope.ScopeConfiguration, f.Locate <IActivationExpressionBuilder>(), f.Locate <IAttributeDiscoveryService>(), f.Locate <IDefaultStrategyExpressionBuilder>(), f.Locate <IInjectionContextCreator>(), f.Locate <IExpressionConstants>(), f.Locate <IInjectionStrategyDelegateCreator>(), f.Locate <ILinqToDynamicMethodConverter>())); }
/// <summary> /// static constructor that sets up a default implementation for the DI container /// </summary> static InjectionScopeConfiguration() { DefaultImplementation = new ImplementationFactory(); DefaultImplementation.ExportSingleton <IAttributeDiscoveryService>(f => new AttributeDiscoveryService()); DefaultImplementation.ExportInstance <IActivationStrategyCollectionContainer <ICompiledExportStrategy> >( f => new ActivationStrategyCollectionContainer <ICompiledExportStrategy>(f.InjectionScope.ScopeConfiguration.ExportStrategyArraySize, f.InjectionScope.ScopeConfiguration.ExportAsBase)); DefaultImplementation.ExportInstance <IActivationStrategyCollectionContainer <ICompiledWrapperStrategy> >( f => new ActivationStrategyCollectionContainer <ICompiledWrapperStrategy>(f.InjectionScope.ScopeConfiguration.ExportStrategyArraySize, f.InjectionScope.ScopeConfiguration.ExportAsBase)); DefaultImplementation.ExportInstance <IActivationStrategyCollectionContainer <ICompiledDecoratorStrategy> >( f => new ActivationStrategyCollectionContainer <ICompiledDecoratorStrategy>(f.InjectionScope.ScopeConfiguration.ExportStrategyArraySize, f.InjectionScope.ScopeConfiguration.ExportAsBase)); DefaultImplementation.ExportInstance <IActivationStrategyCompiler>( f => new ActivationStrategyCompiler(f.InjectionScope.ScopeConfiguration, f.Locate <IActivationExpressionBuilder>(), f.Locate <IAttributeDiscoveryService>(), f.Locate <IDefaultStrategyExpressionBuilder>(), f.Locate <IInjectionContextCreator>(), f.Locate <IExpressionConstants>(), f.Locate <IInjectionStrategyDelegateCreator>())); DefaultImplementation.ExportInstance <ICanLocateTypeService>(f => new CanLocateTypeService()); DefaultImplementation.ExportInstance <IExportRegistrationBlockValueProvider>( f => new ExportRegistrationBlock(f.InjectionScope, f.Locate <IActivationStrategyCreator>())); DefaultImplementation.ExportInstance <IActivationStrategyCreator>( f => new ActivationStrategyProvider(f.InjectionScope, f.Locate <IDefaultStrategyExpressionBuilder>())); DefaultImplementation.ExportInstance <IDefaultStrategyExpressionBuilder>( f => new DefaultStrategyExpressionBuilder(f.Locate <ITypeExpressionBuilder>())); DefaultImplementation.ExportInstance <ITypeExpressionBuilder>( f => new TypeExpressionBuilder(f.Locate <IInstantiationExpressionCreator>(), f.Locate <IDisposalScopeExpressionCreator>(), f.Locate <IMemberInjectionExpressionCreator>(), f.Locate <IMethodInvokeExpressionCreator>(), f.Locate <IEnrichmentExpressionCreator>())); DefaultImplementation.ExportSingleton <IInstantiationExpressionCreator>(f => new InstantiationExpressionCreator()); DefaultImplementation.ExportInstance <IDisposalScopeExpressionCreator>(f => new DisposalScopeExpressionCreator()); DefaultImplementation.ExportInstance <IEnrichmentExpressionCreator>(f => new EnrichmentExpressionCreator()); DefaultImplementation.ExportInstance <IMethodInvokeExpressionCreator>(f => new MethodInvokeExpressionCreator()); DefaultImplementation.ExportInstance <IMemberInjectionExpressionCreator>(f => new MemberInjectionExpressionCreator()); DefaultImplementation.ExportInstance <IActivationExpressionBuilder>( f => new ActivationExpressionBuilder(f.Locate <IArrayExpressionCreator>(), f.Locate <IEnumerableExpressionCreator>(), f.Locate <IWrapperExpressionCreator>(), f.Locate <IInjectionContextValueProvider>())); DefaultImplementation.ExportInstance <IArrayExpressionCreator>( f => new ArrayExpressionCreator(f.Locate <IWrapperExpressionCreator>())); DefaultImplementation.ExportInstance <IEnumerableExpressionCreator>( f => new EnumerableExpressionCreator()); DefaultImplementation.ExportInstance <IWrapperExpressionCreator>( f => new WrapperExpressionCreator()); DefaultImplementation.ExportInstance(f => ExpressionConstants.Default); DefaultImplementation.ExportInstance <IMissingExportStrategyProvider>( f => new ConcreteExportStrategyProvider()); DefaultImplementation.ExportInstance <IDefaultWrapperCollectionProvider>( f => new DefaultWrapperCollectionProvider()); DefaultImplementation.ExportInstance <IInjectionContextCreator>(f => new InjectionContextCreator()); DefaultImplementation.ExportInstance <IInjectionContextValueProvider>(f => new InjectionContextValueProvider()); DefaultImplementation.ExportInstance <IActivationStrategyAttributeProcessor>(f => new ActivationStrategyAttributeProcessor()); DefaultImplementation.ExportInstance <IDynamicArrayLocator>(f => new DynamicArrayLocator()); DefaultImplementation.ExportInstance <IDynamicIEnumerableLocator>(f => new DynamicIEnumerableLocator()); DefaultImplementation.ExportInstance <IInjectionStrategyDelegateCreator>(f => new InjectionStrategyDelegateCreator()); DefaultImplementation.ExportInstance <IStrongMetadataInstanceProvider>(f => new StrongMetadataInstanceProvider()); }