/// <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); } }
/// <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); }