| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Globalization;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- using System.Web;
- using Autofac;
- using Autofac.Integration.Mvc;
- using GreenTree.Nachtragsmanagement.Core.ComponentModel;
- using GreenTree.Nachtragsmanagement.Core.Domain.User;
- using GreenTree.Nachtragsmanagement.Core.Authentication;
- namespace GreenTree.Nachtragsmanagement.Core
- {
- public static class CommonHelper
- {
- private static AspNetHostingPermissionLevel? _trustLevel;
- /// <summary>
- /// Finds the trust level of the running application (http://blogs.msdn.com/dmitryr/archive/2007/01/23/finding-out-the-current-trust-level-in-asp-net.aspx)
- /// </summary>
- /// <returns>The current trust level.</returns>
- public static AspNetHostingPermissionLevel GetTrustLevel()
- {
- if (!_trustLevel.HasValue)
- {
- //set minimum
- _trustLevel = AspNetHostingPermissionLevel.None;
- //determine maximum
- foreach (AspNetHostingPermissionLevel trustLevel in new[] {
- AspNetHostingPermissionLevel.Unrestricted,
- AspNetHostingPermissionLevel.High,
- AspNetHostingPermissionLevel.Medium,
- AspNetHostingPermissionLevel.Low,
- AspNetHostingPermissionLevel.Minimal
- })
- {
- try
- {
- new AspNetHostingPermission(trustLevel).Demand();
- _trustLevel = trustLevel;
- break; //we've set the highest permission we can
- }
- catch (System.Security.SecurityException)
- {
- continue;
- }
- }
- }
- return _trustLevel.Value;
- }
- #region Conversion
- /// <summary>
- /// Sets a property on an object to a valuae.
- /// </summary>
- /// <param name="instance">The object whose property to set.</param>
- /// <param name="propertyName">The name of the property to set.</param>
- /// <param name="value">The value to set the property to.</param>
- public static void SetProperty(object instance, string propertyName, object value)
- {
- if (instance == null) throw new ArgumentNullException("instance");
- if (propertyName == null) throw new ArgumentNullException("propertyName");
- Type instanceType = instance.GetType();
- PropertyInfo pi = instanceType.GetProperty(propertyName);
- if (pi == null)
- throw new Exception(
- String.Format("No property '{0}' found on the instance of type '{1}'.", propertyName, instanceType));
- if (!pi.CanWrite)
- throw new Exception(
- String.Format("The property '{0}' on the instance of type '{1}' does not have a setter.", propertyName, instanceType));
- if (value != null && !value.GetType().IsAssignableFrom(pi.PropertyType))
- value = To(value, pi.PropertyType);
- pi.SetValue(instance, value, new object[0]);
- }
- public static TypeConverter GetCustomTypeConverter(Type type)
- {
- //we can't use the following code in order to register our custom type descriptors
- //TypeDescriptor.AddAttributes(typeof(List<int>), new TypeConverterAttribute(typeof(GenericListTypeConverter<int>)));
- //so we do it manually here
- if (type == typeof(List<int>))
- return new GenericListTypeConverter<int>();
- if (type == typeof(List<decimal>))
- return new GenericListTypeConverter<decimal>();
- if (type == typeof(List<string>))
- return new GenericListTypeConverter<string>();
- return TypeDescriptor.GetConverter(type);
- }
- /// <summary>
- /// Converts a value to a destination type.
- /// </summary>
- /// <param name="value">The value to convert.</param>
- /// <param name="destinationType">The type to convert the value to.</param>
- /// <returns>The converted value.</returns>
- public static object To(object value, Type destinationType)
- {
- return To(value, destinationType, CultureInfo.InvariantCulture);
- }
- /// <summary>
- /// Converts a value to a destination type.
- /// </summary>
- /// <param name="value">The value to convert.</param>
- /// <param name="destinationType">The type to convert the value to.</param>
- /// <param name="culture">Culture</param>
- /// <returns>The converted value.</returns>
- public static object To(object value, Type destinationType, CultureInfo culture)
- {
- if (value != null)
- {
- var sourceType = value.GetType();
- TypeConverter destinationConverter = GetCustomTypeConverter(destinationType);
- TypeConverter sourceConverter = GetCustomTypeConverter(sourceType);
- if (destinationConverter != null && destinationConverter.CanConvertFrom(value.GetType()))
- return destinationConverter.ConvertFrom(null, culture, value);
- if (sourceConverter != null && sourceConverter.CanConvertTo(destinationType))
- return sourceConverter.ConvertTo(null, culture, value, destinationType);
- if (destinationType.IsEnum && value is int)
- return Enum.ToObject(destinationType, (int)value);
- if (!destinationType.IsInstanceOfType(value))
- return Convert.ChangeType(value, destinationType, culture);
- }
- return value;
- }
- /// <summary>
- /// Converts a value to a destination type.
- /// </summary>
- /// <param name="value">The value to convert.</param>
- /// <typeparam name="T">The type to convert the value to.</typeparam>
- /// <returns>The converted value.</returns>
- public static T To<T>(object value)
- {
- //return (T)Convert.ChangeType(value, typeof(T), CultureInfo.InvariantCulture);
- return (T)To(value, typeof(T));
- }
- /// <summary>
- /// Convert enum for front-end
- /// </summary>
- /// <param name="str">Input string</param>
- /// <returns>Converted string</returns>
- public static string ConvertEnum(string str)
- {
- string result = string.Empty;
- char[] letters = str.ToCharArray();
- foreach (char c in letters)
- if (c.ToString() != c.ToString().ToLower())
- result += " " + c.ToString();
- else
- result += c.ToString();
- return result;
- }
- #endregion
- #region User-Handling
- /// <summary>
- /// Evaluate the user context of the current logged in user
- /// </summary>
- public static UserContext UserContext()
- {
- var container = Singleton<Autofac.IContainer>.Instance;
- var userHelper = container.Resolve<IUserHelper>();
- return new UserContext
- {
- CurrentUser = userHelper.FromCookies()
- };
- }
- #endregion
- }
- }
|