Esempio n. 1
0
        /// <summary>
        ///   Invoked by the kernel when one of registered dependencies were satisfied by new components registered.
        /// </summary>
        /// <remarks>
        ///   Handler for the event <see cref = "IKernelEvents.HandlerRegistered" />
        /// </remarks>
        /// <param name = "stateChanged"> </param>
        protected void DependencySatisfied(ref bool stateChanged)
        {
            var missing = missingDependencies;

            if (missing == null)
            {
                // handled on another thread?
                return;
            }
            // Check within the Kernel
            foreach (var dependency in missing.ToArray())
            {
                if (AddResolvableDependency(dependency))
                {
                    missing.Remove(dependency);
                }
            }

            if (AllRequiredDependenciesResolvable())
            {
                SetNewState(HandlerState.Valid);
                stateChanged = true;

                DisconnectEvents();

                // We don't need these anymore
                missingDependencies = null;
            }
        }
Esempio n. 2
0
        protected void AddMissingDependency(DependencyModel dependency)
        {
            var missing = missingDependencies;

            if (missing == null)
            {
                var @new = new SimpleThreadSafeSet <DependencyModel>();
                missing = Interlocked.CompareExchange(ref missingDependencies, @new, null) ?? @new;
            }
            missing.Add(dependency);
            if (state != HandlerState.WaitingDependency)
            {
                // This handler is considered invalid
                // until dependencies are satisfied
                SetNewState(HandlerState.WaitingDependency);

                // Register itself on the kernel
                // to be notified if the dependency is satified
                Kernel.HandlersChanged += DependencySatisfied;

                // We also gonna pay attention for state
                // changed within this very handler. The
                // state can be changed by AddCustomDependencyValue and RemoveCustomDependencyValue
            }
        }
Esempio n. 3
0
        /// <summary>
        ///   Saves the kernel instance, subscribes to <see cref = "IKernelEvents.AddedAsChildKernel" /> event, creates the lifestyle manager instance and computes the handler state.
        /// </summary>
        /// <param name = "kernel"> </param>
        public virtual void Init(IKernelInternal kernel)
        {
            if (kernel == null)
            {
                throw new ArgumentNullException("kernel");
            }
            this.kernel = kernel;
            this.kernel.AddedAsChildKernel += OnAddedAsChildKernel;

            InitDependencies();
            if (AllRequiredDependenciesResolvable())
            {
                SetNewState(HandlerState.Valid);
                DisconnectEvents();
                missingDependencies = null;
            }
        }
Esempio n. 4
0
		/// <summary>
		///   Invoked by the kernel when one of registered dependencies were satisfied by new components registered.
		/// </summary>
		/// <remarks>
		///   Handler for the event <see cref = "IKernelEvents.HandlerRegistered" />
		/// </remarks>
		/// <param name = "stateChanged"> </param>
		protected void DependencySatisfied(ref bool stateChanged)
		{
			var missing = missingDependencies;
			if (missing == null)
			{
				// handled on another thread?
				return;
			}
			// Check within the Kernel
			foreach (var dependency in missing.ToArray())
			{
				if (AddResolvableDependency(dependency))
				{
					missing.Remove(dependency);
				}
			}

			if (AllRequiredDependenciesResolvable())
			{
				SetNewState(HandlerState.Valid);
				stateChanged = true;

				DisconnectEvents();

				// We don't need these anymore
				missingDependencies = null;
			}
		}
Esempio n. 5
0
		protected void AddMissingDependency(DependencyModel dependency)
		{
			var missing = missingDependencies;
			if (missing == null)
			{
				var @new = new SimpleThreadSafeSet<DependencyModel>();
				missing = Interlocked.CompareExchange(ref missingDependencies, @new, null) ?? @new;
			}
			missing.Add(dependency);
			if (state != HandlerState.WaitingDependency)
			{
				// This handler is considered invalid
				// until dependencies are satisfied
				SetNewState(HandlerState.WaitingDependency);

				// Register itself on the kernel
				// to be notified if the dependency is satified
				Kernel.HandlersChanged += DependencySatisfied;

				// We also gonna pay attention for state
				// changed within this very handler. The 
				// state can be changed by AddCustomDependencyValue and RemoveCustomDependencyValue
			}
		}
Esempio n. 6
0
		/// <summary>
		///   Saves the kernel instance, subscribes to <see cref = "IKernelEvents.AddedAsChildKernel" /> event, creates the lifestyle manager instance and computes the handler state.
		/// </summary>
		/// <param name = "kernel"> </param>
		public virtual void Init(IKernelInternal kernel)
		{
			if (kernel == null)
			{
				throw new ArgumentNullException("kernel");
			}
			this.kernel = kernel;
			this.kernel.AddedAsChildKernel += OnAddedAsChildKernel;

			InitDependencies();
			if (AllRequiredDependenciesResolvable())
			{
				SetNewState(HandlerState.Valid);
				DisconnectEvents();
				missingDependencies = null;
			}
		}