/// <summary> /// Создаёт новый контекст описания свойств модели. /// </summary> public DescriptionContext(IApplicationDataProvider infoProvider, Type modelType, TextWriter writer) { ApplicationInfo = infoProvider; Writer = writer; var properties = MetadataProvider.ReadMetadata(modelType); HasNoArguments = properties.Count == 0; var data = properties.OfType <PropertyMetadata>().GroupBy(metadata => metadata.PropertyKind).ToDictionary(g => g.Key, g => g.ToList()); List <PropertyMetadata> temp; if (data.TryGetValue(Kind.Named, out temp)) { NamedProperties = temp; } if (data.TryGetValue(Kind.Positional, out temp)) { PositionalOrderedProperties = temp.OrderBy(m => m.Specification.Position).ToList(); } if (data.TryGetValue(Kind.Unbound, out temp)) { if (temp.Count > 1) { throw new InvalidOperationException("Only one property could be marked by " + typeof(UnboundAttribute).Name); } if (temp.Count == 1) { UnboundProperty = temp[0]; } } NamedArgsInfo = MetadataProvider.GetNamedArgumentsPolicy(modelType); }
/// <summary> /// Создаёт новый экземпляр класса. /// </summary> /// <param name="dataProvider">Поставщик основной информации о запускаемом приложении.</param> /// <param name="modelType">Тип модели.</param> /// <param name="showLogo">Флаг, определяющий необходимость отображения информации о приложении.</param> public UsagePrinter(Type modelType, IApplicationDataProvider dataProvider, bool showLogo = true) { this.showLogo = showLogo; this.modelType = modelType; appInfo = dataProvider; }