/// <summary> /// Default constructor /// </summary> /// <param name="strategyCreator"></param> /// <param name="typesToExport"></param> /// <param name="scopeConfiguration"></param> public ExportTypeSetConfiguration(IActivationStrategyCreator strategyCreator, IEnumerable <Type> typesToExport, IInjectionScopeConfiguration scopeConfiguration) { _strategyCreator = strategyCreator; _typesToExport = typesToExport; _scopeConfiguration = scopeConfiguration; _whereFilter = new GenericFilterGroup <Type>(ShouldSkipType, ExcludeTypesFilter); }
/// <summary> /// Configuration object constructor /// </summary> /// <param name="configuration"></param> /// <param name="parent"></param> /// <param name="name"></param> public InjectionScope(IInjectionScopeConfiguration configuration, IInjectionScope parent, string name) : base(parent, name, new ActivationStrategyDelegateCache()) { configuration.SetInjectionScope(this); InternalFieldStorage.ScopeConfiguration = configuration; InternalFieldStorage.InjectionContextCreator = configuration.Implementation.Locate <IInjectionContextCreator>(); InternalFieldStorage.CanLocateTypeService = configuration.Implementation.Locate <ICanLocateTypeService>(); InternalFieldStorage.ActivationStrategyCompiler = configuration.Implementation.Locate <IActivationStrategyCompiler>(); InternalFieldStorage.StrategyCollectionContainer = AddDisposable(configuration.Implementation.Locate <IActivationStrategyCollectionContainer <ICompiledExportStrategy> >()); InternalFieldStorage.DecoratorCollectionContainer = AddDisposable(configuration.Implementation.Locate <IActivationStrategyCollectionContainer <ICompiledDecoratorStrategy> >()); if (configuration.AutoRegisterUnknown && Parent == null) { InternalFieldStorage.MissingExportStrategyProviders = InternalFieldStorage.MissingExportStrategyProviders.Add( configuration.Implementation.Locate <IMissingExportStrategyProvider>()); } if (configuration.SupportFuncType) { StrategyCollectionContainer.AddStrategy(new FuncTypeStrategy(this)); } }
/// <summary> /// Default constructor /// </summary> /// <param name="configuration">scope configuration</param> /// <param name="builder">activation expression builder</param> /// <param name="attributeDiscoveryService">attribute discovery service</param> /// <param name="exportExpressionBuilder">expression builder</param> /// <param name="injectionContextCreator">injection context creator</param> /// <param name="constants">expression constants</param> /// <param name="injectionStrategyDelegateCreator">injection strategy creator</param> public ActivationStrategyCompiler(IInjectionScopeConfiguration configuration, IActivationExpressionBuilder builder, IAttributeDiscoveryService attributeDiscoveryService, IDefaultStrategyExpressionBuilder exportExpressionBuilder, IInjectionContextCreator injectionContextCreator, IExpressionConstants constants, IInjectionStrategyDelegateCreator injectionStrategyDelegateCreator) { _configuration = configuration; _builder = builder; _attributeDiscoveryService = attributeDiscoveryService; _constants = constants; _injectionStrategyDelegateCreator = injectionStrategyDelegateCreator; _exportExpressionBuilder = exportExpressionBuilder; _injectionContextCreator = injectionContextCreator; }
/// <summary> /// Configuration object constructor /// </summary> /// <param name="configuration"></param> /// <param name="parent"></param> /// <param name="name"></param> public InjectionScope(IInjectionScopeConfiguration configuration, IInjectionScope parent, string name) : base(parent, name, new ImmutableHashTree <Type, ActivationStrategyDelegate> [configuration.CacheArraySize]) { configuration.SetInjectionScope(this); InternalFieldStorage.ScopeConfiguration = configuration; InternalFieldStorage.InjectionContextCreator = configuration.Implementation.Locate <IInjectionContextCreator>(); InternalFieldStorage.CanLocateTypeService = configuration.Implementation.Locate <ICanLocateTypeService>(); InternalFieldStorage.ActivationStrategyCompiler = configuration.Implementation.Locate <IActivationStrategyCompiler>(); InternalFieldStorage.StrategyCollectionContainer = AddDisposable(configuration.Implementation.Locate <IActivationStrategyCollectionContainer <ICompiledExportStrategy> >()); InternalFieldStorage.DecoratorCollectionContainer = AddDisposable(configuration.Implementation.Locate <IActivationStrategyCollectionContainer <ICompiledDecoratorStrategy> >()); for (var i = 0; i <= ArrayLengthMinusOne; i++) { ActivationDelegates[i] = ImmutableHashTree <Type, ActivationStrategyDelegate> .Empty; } if (configuration.AutoRegisterUnknown && Parent == null) { InternalFieldStorage.MissingExportStrategyProviders = InternalFieldStorage.MissingExportStrategyProviders.Add( configuration.Implementation.Locate <IMissingExportStrategyProvider>()); } if (configuration.SupportFuncType) { StrategyCollectionContainer.AddStrategy(new FuncTypeStrategy(this)); } DisposalScopeProvider = configuration.DisposalScopeProvider; DisposalScope = DisposalScopeProvider == null ? this : null; }
/// <summary> /// Constructor takes a configuration object /// </summary> /// <param name="configuration"></param> public InjectionScope(IInjectionScopeConfiguration configuration) : this(configuration, null, "RootScope") { }
/// <summary> /// Default constructor /// </summary> /// <param name="configuration"></param> /// <param name="builder"></param> /// <param name="attributeDiscoveryService"></param> /// <param name="exportExpressionBuilder"></param> /// <param name="injectionContextCreator"></param> /// <param name="constants"></param> /// <param name="injectionCreator"></param> /// <param name="linqToDynamicMethodConverter"></param> public DynamicMethodStrategyCompiler(IInjectionScopeConfiguration configuration, IActivationExpressionBuilder builder, IAttributeDiscoveryService attributeDiscoveryService, IDefaultStrategyExpressionBuilder exportExpressionBuilder, IInjectionContextCreator injectionContextCreator, IExpressionConstants constants, IInjectionStrategyDelegateCreator injectionCreator, ILinqToDynamicMethodConverter linqToDynamicMethodConverter) : base(configuration, builder, attributeDiscoveryService, exportExpressionBuilder, injectionContextCreator, constants, injectionCreator) { _linqToDynamicMethodConverter = linqToDynamicMethodConverter; }
/// <summary> /// Default constructor /// </summary> /// <param name="configuration"></param> public GraceServiceProviderFactory(IInjectionScopeConfiguration configuration) { _configuration = configuration ?? new InjectionScopeConfiguration(); }
/// <summary> /// This should be used for ASP.Net 2.0 - 2.2 /// </summary> /// <param name="builder"></param> /// <param name="configuration"></param> /// <returns></returns> public static IWebHostBuilder UseGrace(this IWebHostBuilder builder, IInjectionScopeConfiguration configuration = null) { return(builder.ConfigureServices(c => c.AddSingleton <IServiceProviderFactory <IInjectionScope> >(new GraceServiceProviderFactory(configuration)))); }
/// <summary> /// This method is for ASP.Net Core 3.0 /// </summary> /// <param name="builder"></param> /// <param name="configuration"></param> /// <returns></returns> public static IHostBuilder UseGrace(this IHostBuilder builder, IInjectionScopeConfiguration configuration = null) { return(builder.UseServiceProviderFactory(new GraceServiceProviderFactory(configuration))); }
/// <summary> /// Constructor requiring an injection scope configuration object be provided /// </summary> /// <param name="configuration">configuration object</param> public DependencyInjectionContainer(IInjectionScopeConfiguration configuration) : base(configuration) { }
/// <summary> /// /// </summary> /// <param name="builder"></param> /// <param name="configuration"></param> public static IWebHostBuilder UseGrace(this IWebHostBuilder builder, IInjectionScopeConfiguration configuration = null) { return(builder.ConfigureServices(c => c.AddGrace(configuration))); }
/// <summary> /// Add Grace DI container /// </summary> /// <param name="collection"></param> /// <param name="configuration"></param> public static IServiceCollection AddGrace(this IServiceCollection collection, IInjectionScopeConfiguration configuration = null) { return(collection.AddSingleton <IServiceProviderFactory <IInjectionScope> >(new GraceServiceProviderFactory(configuration))); }