예제 #1
0
        public object Resolve(Type interfaceType)
        {
            object retVal = null;

            RegisteredObject obj = null;

            if (!_registeredObjects.TryGetValue(interfaceType, out obj))
            {
                if (interfaceType == typeof(IIoCContainer))
                {
                    retVal = _instance;
                }
                else
                {
                    throw new KeyNotFoundException(string.Format("The type \"{0}\" has not been registered.", interfaceType.Name));
                }
            }
            else
            {
                retVal = obj.GetInstance();

                //initialize transient objects here
                if (obj.ObjectLifeCycle == LifeCycle.Transient)
                {
                    if (typeof(IInitializable).IsAssignableFrom(interfaceType))
                    {
                        var initializable = retVal as IInitializable;

                        if (initializable != null && !initializable.IsInitialized)
                        {
                            initializable.Initialize();
                        }
                    }
                }
            }

            return(retVal);
        }
예제 #2
0
        public void Register(Type interfaceType, Type concreteType, LifeCycle lifeCycle)
        {
            RegisteredObject obj = new RegisteredObject(interfaceType, concreteType, lifeCycle);

            _registeredObjects.Add(interfaceType, obj);
        }