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); }
public void Register(Type interfaceType, Type concreteType, LifeCycle lifeCycle) { RegisteredObject obj = new RegisteredObject(interfaceType, concreteType, lifeCycle); _registeredObjects.Add(interfaceType, obj); }