public IObjectAssemblySpecification Register(string name, Type tType, Type tImpl) { if (tType.ContainsGenericParameters) { return(RegisterOpenType(name, tType, tImpl)); } else { return(Register(name, tType, CreateInstanceDelegateFactory.Create(tImpl))); } }
private object HandleUnResolved(Exception knfe, string name, Type type) { if (type.IsGenericType) { object result = ResolveUsingOpenType(knfe, name, type); if (result != null) { return(result); } } if (type.IsClass) { try { var func = CreateInstanceDelegateFactory.Create(type); Register(name, type, func); return(_typeRegistry.Get(name, type).GetInstance()); } catch { throw new KeyNotFoundException(ResolveFailureMessage(type), knfe); } } if (type.IsInterface) { var regs = _typeRegistry.GetDerived(name, type); var reg = regs.FirstOrDefault(); if (reg != null) { object instance = reg.GetInstance(); Register(name, type, (c) => c.Resolve(name, instance.GetType())); return(instance); } else { throw new KeyNotFoundException(ResolveFailureMessage(type), knfe); } } throw new KeyNotFoundException(ResolveFailureMessage(type), knfe); }