/// <summary>
        /// Gibt eine Instanz einer registrierten Komponente zurück.
        /// </summary>
        /// <param name="registration">Komponentenregistrierung</param>
        /// <returns>Komponenten-Instanz</returns>
        internal object GetComponentInstance(ComponentRegistration registration)
        {
            // Wenn keine Komponentenregistrierung angegeben wurde ...
            if (registration == null)
            {
                // Ausnahme werfen
                throw new ArgumentNullException("registration");
            }

            // Aktivierungsart auswerten
            switch (registration.ActivationType)
            {
            case ActivationType.SingleCall:     // SingleCall-Aktivierung

                // Wenn eine Initialisierungsfunktion angegeben wurde ...
                if (registration.InitializationHandler != null)
                {
                    // Komponenteninstanz von Inizialisierungsfunktion erzeugen lassen
                    return(registration.InitializationHandler());
                }
                else
                {
                    // Komponenteninstanz erzeugen
                    return(Activator.CreateInstance(registration.ImplementationType));
                }

            case ActivationType.Singleton:     // Singleton-Aktivierung

                // Wenn noch keine Singleton-Instanz existiert ...
                if (registration.SingletonInstance == null)
                {
                    lock (registration.SyncLock)
                    {
                        // Wenn die Singleton-Instanz nicht bereits durch einen anderen Thread erzeugt wurde ...
                        if (registration.SingletonInstance == null)
                        {
                            // Wenn eine Initialisierungsfunktion angegeben wurde ...
                            if (registration.InitializationHandler != null)
                            {
                                // Singleton-Instanz mittels Inizialisierungsfunktion erzeugen
                                registration.SingletonInstance = registration.InitializationHandler();
                            }
                            else
                            {
                                // Singleton-Instanz erzeugen
                                registration.SingletonInstance = Activator.CreateInstance(registration.ImplementationType);
                            }
                        }
                    }
                }
                // Singleton-Instanz zurückgeben
                return(registration.SingletonInstance);
            }
            // Ausnahme werfen
            throw new NullReferenceException();
        }
Пример #2
0
        /// <summary>
        /// Returns an instance of a specified registered component.
        /// </summary>
        /// <param name="registration">Component registration</param>
        /// <returns>Component instance</returns>
        public object GetComponentInstance(ComponentRegistration registration)
        {
            if (registration == null)
            {
                throw new ArgumentNullException("registration");
            }

            switch (registration.ActivationType)
            {
            case ActivationType.SingleCall:

                object instance = null;
                if (registration.InitializationHandler != null)
                {
                    instance = registration.InitializationHandler();
                }
                else
                {
                    instance = Activator.CreateInstance(registration.ImplementationType);
                }

                // attach event handlers
                registration.EventStub.WireTo(instance);
                return(instance);

            case ActivationType.Singleton:

                if (registration.SingletonInstance == null)
                {
                    lock (registration.SyncLock)
                    {
                        if (registration.SingletonInstance == null)
                        {
                            if (registration.InitializationHandler != null)
                            {
                                registration.SingletonInstance = registration.InitializationHandler();
                            }
                            else
                            {
                                registration.SingletonInstance = Activator.CreateInstance(registration.ImplementationType);
                            }

                            // attach event handlers
                            registration.EventStub.WireTo(registration.SingletonInstance);
                        }
                    }
                }

                return(registration.SingletonInstance);
            }

            throw new InvalidOperationException("Component instance couldn't be created.");
        }