Пример #1
0
        public T Resolve <T>()
        {
            if (TypeContainer == null)
            {
                throw new TypeRepositoryEmptyException();
            }

            var desiredType = typeof(T);
            var outputPair  = TypeContainer.FirstOrDefault(pair => pair.Key == desiredType);

            if (IsPairValuesNull(outputPair))
            {
                if (!this.ResolveImplicit)
                {
                    throw new CannotResolveTypeException();
                }


                outputPair = this.TypeContainer.FirstOrDefault(pair => desiredType.IsAssignableFrom(pair.Value));
                if (IsPairValuesNull(outputPair))
                {
                    throw new CannotResolveTypeException();
                }
            }


            var outputType = outputPair.Value;

            if (!desiredType.IsAssignableFrom(outputType))
            {
                throw new CannotResolveTypeException();
            }

            // tworzymy instancje klasy
            return((T)Activator.CreateInstance(outputType));
        }