private static Tuple<Type, Func<object, object>> GetLoggerAccessor(Type targetType, string loggerName)
{
const BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static;
if (string.IsNullOrEmpty(loggerName))
{
// *Logger* field
var field = targetType.GetFields(bindingFlags).FirstOrDefault(f => f.Name.ToLower().Contains("logger"));
if (field != null)
return Tuple.Create<Type, Func<object, object>>(field.FieldType, o => field.GetValue(o));
// *Logger* property
var property = targetType.GetProperties(bindingFlags).FirstOrDefault(f => f.Name.ToLower().Contains("logger"));
if (property != null)
return Tuple.Create<Type, Func<object, object>>(property.PropertyType, o => property.GetValue(o));
// *Log* field
var field2 = targetType.GetFields(bindingFlags).FirstOrDefault(f => f.Name.ToLower().Contains("log"));
if (field2 != null)
return Tuple.Create<Type, Func<object, object>>(field2.FieldType, o => field2.GetValue(o));
// *Log* property
var property2 = targetType.GetProperties(bindingFlags).FirstOrDefault(f => f.Name.ToLower().Contains("log"));
if (property2 != null)
return Tuple.Create<Type, Func<object, object>>(property2.PropertyType, o => property2.GetValue(o));
}
else
{
var field = targetType.GetField(loggerName, bindingFlags);
if (field != null)
return Tuple.Create<Type, Func<object, object>>(field.FieldType, o => field.GetValue(o));
var property = targetType.GetProperty(loggerName, bindingFlags);
if (property != null)
return Tuple.Create<Type, Func<object, object>>(property.PropertyType, o => property.GetValue(o));
}
return null;
}