ContainerConfigurator
Represents a container configurator.
using Stashbox.Lifetime;
using Stashbox.Registration.Fluent;
using System;
using System.Collections.Generic;
using System.Reflection;
namespace Stashbox.Configuration
{
public class ContainerConfigurator
{
public ContainerConfiguration ContainerConfiguration { get; }
internal ContainerConfigurator()
{
ContainerConfiguration = ContainerConfiguration.DefaultContainerConfiguration();
}
public ContainerConfigurator WithDisposableTransientTracking()
{
ContainerConfiguration.TrackTransientsForDisposalEnabled = true;
return this;
}
public ContainerConfigurator WithRegistrationBehavior(Rules.RegistrationBehavior registrationBehavior)
{
ContainerConfiguration.RegistrationBehavior = registrationBehavior;
return this;
}
public ContainerConfigurator WithRuntimeCircularDependencyTracking()
{
ContainerConfiguration.RuntimeCircularDependencyTrackingEnabled = true;
return this;
}
public ContainerConfigurator WithCircularDependencyWithLazy()
{
ContainerConfiguration.CircularDependenciesWithLazyEnabled = true;
return this;
}
public ContainerConfigurator WithDefaultValueInjection()
{
ContainerConfiguration.DefaultValueInjectionEnabled = true;
return this;
}
public ContainerConfigurator WithUnknownTypeResolution(Action<UnknownRegistrationConfigurator> configurator = null)
{
ContainerConfiguration.UnknownTypeResolutionEnabled = true;
ContainerConfiguration.UnknownTypeConfigurator = configurator;
return this;
}
public ContainerConfigurator WithAutoMemberInjection(Rules.AutoMemberInjectionRules rule = Rules.AutoMemberInjectionRules.PropertiesWithPublicSetter, Func<MemberInfo, bool> filter = null)
{
ContainerConfiguration.MemberInjectionWithoutAnnotationEnabled = true;
ContainerConfiguration.MemberInjectionWithoutAnnotationRule = rule;
ContainerConfiguration.MemberInjectionFilter = filter;
return this;
}
public ContainerConfigurator WithConstructorSelectionRule(Func<IEnumerable<ConstructorInfo>, IEnumerable<ConstructorInfo>> selectionRule)
{
ContainerConfiguration.ConstructorSelectionRule = selectionRule;
return this;
}
public ContainerConfigurator OnContainerConfigurationChanged(Action<ContainerConfiguration> configurationChanged)
{
ContainerConfiguration.ConfigurationChangedEvent = configurationChanged;
return this;
}
public ContainerConfigurator TreatParameterAndMemberNameAsDependencyName()
{
ContainerConfiguration.TreatingParameterAndMemberNameAsDependencyNameEnabled = true;
return this;
}
public ContainerConfigurator WithNamedDependencyResolutionForUnNamedRequests()
{
ContainerConfiguration.NamedDependencyResolutionForUnNamedRequestsEnabled = true;
return this;
}
public ContainerConfigurator WithMicrosoftExpressionCompiler()
{
ContainerConfiguration.ForceUseMicrosoftExpressionCompiler = true;
return this;
}
public ContainerConfigurator WithDefaultLifetime(LifetimeDescriptor lifetime)
{
ContainerConfiguration.DefaultLifetime = lifetime;
return this;
}
public ContainerConfigurator WithLifetimeValidation()
{
ContainerConfiguration.LifetimeValidationEnabled = true;
return this;
}
}
}