예제 #1
0
        /// <summary>
        /// Создает экземпляр объекта.
        /// </summary>
        /// <typeparam name="T">Тип.</typeparam>
        /// <param name="args">Параметры конструктора объекта.</param>
        /// <returns></returns>
        private T CreateInstance <T>(params object[] args)
        {
            try
            {
                ConfigTypeMapping implementationTypeDefinition = this.EnsureTypeDefinition <T>();
                if (args == null || args.Length == 0)
                {
                    if (implementationTypeDefinition.SettingsNode != null)
                    {
                        object ctorParam = implementationTypeDefinition.SettingsNode;
                        args    = new object[1];
                        args[0] = ctorParam;
                    }
                }

                T instance;
                if (args == null || args.Length == 0)
                {
                    instance = (T)Activator.CreateInstance(implementationTypeDefinition.CLRType);
                }
                else
                {
                    instance = (T)Activator.CreateInstance(implementationTypeDefinition.CLRType, args);
                }

                return(instance);
            }
            catch (Exception ex)
            {
                throw new Exception(
                          String.Format("Не удалось создать имплементацию интерфейса '{0}'", typeof(T).FullName),
                          ex);
            }
        }
예제 #2
0
        /// <summary>
        /// Получает сопоставление типа Т.
        /// </summary>
        /// <typeparam name="T">Тип.</typeparam>
        /// <returns></returns>
        private ConfigTypeMapping EnsureTypeDefinition <T>()
        {
            Type interfaceType = typeof(T);

            if (!this.Types.ContainsKey(interfaceType.FullName))
            {
                throw new Exception(string.Format("Тип с именем {0} не зарегистрирован в конфигурационном файла",
                                                  interfaceType.FullName));
            }

            ConfigTypeMapping implementationTypeDefinition = this.Types[interfaceType.FullName];

            return(implementationTypeDefinition);
        }