GetMembersPerformanceCounters <TPerformanceCountersContainer> ( TPerformanceCountersContainer target ) { return //GetPerformanceCountersPropertiesOrFields (GetPerformanceCountersMembers <TPerformanceCountersContainer>() .Select ( (x) => { return DynamicExpressionTreeHelper .CreateMemberGetter <TPerformanceCountersContainer, PerformanceCounter> ( x.Name )(target); } )); }
GetModelMembersAccessors ( Type targetType , bool needDefinitionAttributeProcess = false ) { var members = TypeHelper .GetModelMembers ( targetType ); foreach (var member in members) { var memberName = member.Name; Type memberType = null; MemberTypes?memberTypes = null; if (member is FieldInfo) { var fieldInfo = member as FieldInfo; memberType = fieldInfo.FieldType; } else if (member is PropertyInfo) { var propertyInfo = member as PropertyInfo; memberType = propertyInfo.PropertyType; } var accessor = new MemberAccessor() { Getter = DynamicExpressionTreeHelper .CreateMemberGetter(targetType, memberName) , Setter = DynamicExpressionTreeHelper .CreateMemberSetter(targetType, memberName) , Member = member , Types = memberTypes , Name = memberName , Key = memberName , MemberType = GetNullableUnderlyingType(memberType) }; if (needDefinitionAttributeProcess) { var attribute = member .GetCustomAttributes ( typeof(MemberAdditionalDefinitionAttribute) , true ) .FirstOrDefault(); //as DataTableColumnIDAttribute; if (attribute != null) { var asAttribute = attribute as MemberAdditionalDefinitionAttribute; if (asAttribute != null) { //if (asAttribute.DataTableColumnDataType != null) //{ // accessor // .MemberType = asAttribute // .DataTableColumnDataType; //} accessor .DefinitionAttribute = asAttribute; if ( !asAttribute .DataTableColumnName .IsNullOrEmptyOrWhiteSpace() ) { accessor .Key = asAttribute .DataTableColumnName; } } } } yield return (accessor); } //var properties = type.GetProperties(); //foreach (var property in properties) //{ // if // ( // ModelMemberTypes // .Any // ( // (x) => // { // var r = false; // var propertyType = property.PropertyType; // if (x == propertyType) // { // r = true; // } // if (!r) // { // if // ( // propertyType // .IsGenericType // && // propertyType // .GetGenericTypeDefinition() // .Equals // ( // typeof(Nullable<>) // ) // ) // { // if // ( // x // == // GetNullableUnderlyingType // (propertyType) // ) // { // r = true; // } // } // } // return r; // } // ) // ) // { // var propertyName = property.Name; // var propertyType = property.PropertyType; // var accessor = new MemberAccessor() // { // Getter = DynamicPropertyAccessor // .CreateGetPropertyValueFunc(type, propertyName) // , Setter = DynamicPropertyAccessor // .CreateSetPropertyValueAction(type, propertyName) // , Member = property // , Name = property.Name // , Key = property.Name // , MemberType = GetNullableUnderlyingType(propertyType) // }; // if (needDefinitionAttributeProcess) // { // var attribute = property // .GetCustomAttributes // ( // typeof(MemberAdditionalDefinitionAttribute) // , true // ) // .FirstOrDefault(); //as DataTableColumnIDAttribute; // if (attribute != null) // { // var asAttribute = // attribute as MemberAdditionalDefinitionAttribute; // if (asAttribute != null) // { // if (asAttribute.DataTableColumnDataType != null) // { // accessor // .MemberType = asAttribute // .DataTableColumnDataType; // } // accessor // .DefinitionAttribute = asAttribute; // if // ( // !asAttribute // .DataTableColumnName // .IsNullOrEmptyOrWhiteSpace() // ) // { // accessor // .Key // = asAttribute // .DataTableColumnName; // } // } // } // } // yield // return // accessor; // } //} //); //return dictionary; }
GetPerformanceCountersByLevel <TPerformanceCountersContainer> ( TPerformanceCountersContainer container , int level ) { var type = typeof(TPerformanceCountersContainer); return (type .GetCustomAttributedMembers <PerformanceCounterDefinitionAttribute> ( (memberTypes, memberInfo, attribute) => { var r = false; if (attribute != null) { r = (attribute.Level == level); } return r; } ) .Select ( (x) => { var func = DynamicExpressionTreeHelper .CreateMemberGetter <TPerformanceCountersContainer, PerformanceCounter> ( x.Name ); return func(container); } )); //return // typeof(TPerformanceCountersContainer) // .GetProperties() // .Where // ( // (pi) => // { // var r = false; // var attribute // = pi // .GetCustomAttributes(false) // .FirstOrDefault // ( // (x) => // { // return // ( // x as PerformanceCounterDefinitionAttribute // != // null // ); // } // ) as PerformanceCounterDefinitionAttribute; // if (attribute != null) // { // r = (attribute.Level == level); // } // return r; // } // ) // .Select // ( // (pi) => // { // var func = // DynamicExpressionTreeHelper // .CreateGetPropertyValueFunc // <TPerformanceCountersContainer, PerformanceCounter> // ( // pi.Name // ); // return func(container); // } // ); }
InitializeProcessingTypedPerformanceCountersPairs <TPerformanceCountersContainer> ( TPerformanceCountersContainer target , PerformanceCounterProcessingFlagsType inclusivePerformanceCounterProcessingFlagsType , PerformanceCounterProcessingFlagsType exclusivePerformanceCounterProcessingFlagsType = PerformanceCounterProcessingFlagsType.None ) where TPerformanceCountersContainer : AbstractPerformanceCountersContainer { //var properties = GetPerformanceCountersPropertiesOrFields<TPerformanceCountersContainer, PerformanceCountersPair>(); var members = GetPerformanceCountersPairsMembers <TPerformanceCountersContainer>(); var memberName = string .Format ( "{0}{1}" , Enum .GetName ( typeof(PerformanceCounterProcessingFlagsType) , inclusivePerformanceCounterProcessingFlagsType ) , "PerformanceCountersPairs" ); var setter = DynamicExpressionTreeHelper .CreateMemberSetter <TPerformanceCountersContainer, PerformanceCountersPair[]> ( memberName ); var targetValue = members .Where ( (x) => { var r = false; var attribute = x .GetCustomAttribute <PerformanceCounterDefinitionAttribute>(); if (attribute != null) { r = attribute .CounterProcessingType .HasFlag(inclusivePerformanceCounterProcessingFlagsType); } return(r); } ) .Select ( (x) => { return (DynamicExpressionTreeHelper .CreateMemberGetter <TPerformanceCountersContainer, PerformanceCountersPair> ( x.Name )(target)); } ) .ToArray(); setter(target, targetValue); }
protected PerformanceCounter GetPerformanceCounterByName <TPerformanceCountersContainer> ( TPerformanceCountersContainer target , string performanceCounterName ) { //var propertyInfo // = typeof(TPerformanceCountersContainer) // .GetProperties() // .FirstOrDefault // ( // (pi) => // { // var rr = false; // var attribute // = pi // .GetCustomAttributes(false) // .FirstOrDefault // ( // (x) => // { // return // ( // x as PerformanceCounterDefinitionAttribute // != // null // ); // } // ) as PerformanceCounterDefinitionAttribute; // if (attribute != null) // { // rr = (attribute.CounterName == performanceCounterName); // } // return rr; // } // ); var type = typeof(TPerformanceCountersContainer); //return var memberInfo = type .GetCustomAttributedMembers <PerformanceCounterDefinitionAttribute> ( (memberTypes, x, attribute) => { var rr = false; if (attribute != null) { rr = true; } return(rr); } ) .SingleOrDefault(); PerformanceCounter r = null; Func <TPerformanceCountersContainer, PerformanceCounter> func = null; if (memberInfo != null) { func = DynamicExpressionTreeHelper .CreateMemberGetter <TPerformanceCountersContainer, PerformanceCounter> ( memberInfo.Name ); r = func(target); } return(r); }