示例#1
0
        internal ServiceRegistration(Type implementationType, IContainerConfigurator containerConfigurator,
                                     IObjectBuilderSelector objectBuilderSelector, RegistrationContextData registrationContextData,
                                     bool isDecorator, bool shouldHandleDisposal)
        {
            this.containerConfigurator = containerConfigurator;
            this.objectBuilderSelector = objectBuilderSelector;
            this.ImplementationType    = implementationType;
            this.metaInformation       = MetaInformation.GetOrCreateMetaInfo(implementationType);
            this.Constructors          = this.metaInformation.GetConstructors();
            this.InjectionMethods      = this.metaInformation.GetInjectionMethods();
            this.InjectionMembers      = this.metaInformation.SelectInjectionMembers(registrationContextData,
                                                                                     containerConfigurator.ContainerConfiguration);
            this.SelectedConstructor  = this.metaInformation.FindSelectedConstructor(registrationContextData);
            this.RegistrationNumber   = ReserveRegistrationNumber();
            this.RegistrationContext  = registrationContextData;
            this.IsDecorator          = isDecorator;
            this.ShouldHandleDisposal = shouldHandleDisposal;

            this.HasName = this.RegistrationContext.Name != null;

            this.HasScopeName = this.RegistrationContext.Lifetime is NamedScopeLifetime;

            this.HasCondition = this.RegistrationContext.TargetTypeCondition != null || this.RegistrationContext.ResolutionCondition != null ||
                                this.RegistrationContext.AttributeConditions != null && this.RegistrationContext.AttributeConditions.Any();

            this.RegistrationId = this.RegistrationContext.Name ??
                                  (containerConfigurator.ContainerConfiguration.SetUniqueRegistrationNames
                ? (object)this.RegistrationNumber
                : implementationType);

            this.objectBuilder = this.SelectObjectBuilder();
        }
示例#2
0
 internal ServiceRegistrator(IContainerContext containerContext, IContainerExtensionManager containerExtensionManager,
                             IObjectBuilderSelector objectBuilderSelector)
 {
     this.containerContext          = containerContext;
     this.containerExtensionManager = containerExtensionManager;
     this.objectBuilderSelector     = objectBuilderSelector;
 }
示例#3
0
 internal StashboxContainer(IStashboxContainer parentContainer, IContainerExtensionManager containerExtensionManager,
                            IResolverSelector resolverSelector)
 {
     this.disposed                  = new AtomicBool();
     this.ParentContainer           = parentContainer;
     this.containerExtensionManager = containerExtensionManager;
     this.resolverSelector          = resolverSelector;
     this.registrationRepository    = new RegistrationRepository();
     this.ContainerContext          = new ContainerContext(this.registrationRepository, new DelegateRepository(), this,
                                                           new ResolutionStrategy(this.resolverSelector), parentContainer.ContainerContext.ContainerConfigurator,
                                                           parentContainer.ContainerContext.DecoratorRepository);
     this.activationContext = new Resolution.ActivationContext(this.ContainerContext, this.resolverSelector, this);
     this.containerExtensionManager.ReinitalizeExtensions(this.ContainerContext);
     this.expressionBuilder     = new ExpressionBuilder(this.ContainerContext, this.containerExtensionManager);
     this.objectBuilderSelector = new ObjectBuilderSelector(this.ContainerContext, this.expressionBuilder);
     this.ServiceRegistrator    = new ServiceRegistrator(this.ContainerContext, this.containerExtensionManager, this.objectBuilderSelector);
 }
示例#4
0
        /// <summary>
        /// Constructs a <see cref="StashboxContainer"/>
        /// </summary>
        public StashboxContainer(Action <IContainerConfigurator> config = null)
        {
            this.disposed = new AtomicBool();
            this.containerExtensionManager = new BuildExtensionManager();
            this.resolverSelector          = new ResolverSelector();

            var configurator = new ContainerConfigurator();

            config?.Invoke(configurator);

            this.registrationRepository = new RegistrationRepository();
            this.ContainerContext       = new ContainerContext(this.registrationRepository, new DelegateRepository(), this,
                                                               new ResolutionStrategy(this.resolverSelector), configurator, new DecoratorRepository());
            this.activationContext     = new Resolution.ActivationContext(this.ContainerContext, this.resolverSelector, this);
            this.expressionBuilder     = new ExpressionBuilder(this.ContainerContext, this.containerExtensionManager);
            this.objectBuilderSelector = new ObjectBuilderSelector(this.ContainerContext, this.expressionBuilder);
            this.ServiceRegistrator    = new ServiceRegistrator(this.ContainerContext, this.containerExtensionManager, this.objectBuilderSelector);
            this.RegisterResolvers();
        }
示例#5
0
        internal StashboxContainer(IContainerExtensionManager containerExtensionManager, IResolverSelector resolverSelector,
                                   IContainerConfigurator containerConfigurator, IDecoratorRepository decoratorRepository, Action <IContainerConfigurator> config = null)
        {
            this.containerExtensionManager = containerExtensionManager;
            this.resolverSelector          = resolverSelector;

            config?.Invoke(containerConfigurator);

            this.ContainerContext = new ContainerContext(this.registrationRepository, this,
                                                         new ResolutionStrategy(this.resolverSelector), containerConfigurator, decoratorRepository);

            var expressionBuilder = new ExpressionBuilder(this.containerExtensionManager, new ConstructorSelector());

            this.serviceRegistrator    = new ServiceRegistrator(this.ContainerContext, this.containerExtensionManager);
            this.objectBuilderSelector = new ObjectBuilderSelector(expressionBuilder, this.serviceRegistrator);
            this.registrationBuilder   = new RegistrationBuilder(this.ContainerContext, this.objectBuilderSelector);

            this.RootScope    = new ResolutionScope(this.resolverSelector, expressionBuilder, this.ContainerContext);
            this.rootResolver = (IDependencyResolver)this.RootScope;
        }
示例#6
0
 public RegistrationBuilder(IContainerContext containerContext, IObjectBuilderSelector objectBuilderSelector)
 {
     this.containerContext      = containerContext;
     this.objectBuilderSelector = objectBuilderSelector;
 }