private static object GetValueFromExtraDataProvider <T>(object key, IExtraDataContainer dataProvider)
        {
            object value = null;

            if (key != null)
            {
                value = dataProvider.GetExtraData(key);
            }

            return(value ?? dataProvider.Values.FirstOrDefault(o =>
            {
                if (o is T)
                {
                    return true;
                }

                var delegateInstance = o as Delegate;

                if (delegateInstance != null)
                {
                    return delegateInstance.GetMethodInfo().ReturnType == typeof(T);
                }

                return false;
            }));
        }
Beispiel #2
0
        public void ExtraDataContainerDebuggerView_DisplayValue(ExtraDataContainerDebuggerView debugger,
                                                                IExtraDataContainer extraDataContainer)
        {
            extraDataContainer.KeyValuePairs.Returns(new[]
            {
                new KeyValuePair <object, object>(2, "World"),
                new KeyValuePair <object, object>(1, "Hello"),
            });

            var property = debugger.GetType().GetTypeInfo().GetProperty("DebuggerDisplayValue", BindingFlags.Instance | BindingFlags.NonPublic);

            Assert.Equal("Count: 2", property.GetValue(debugger));
        }
Beispiel #3
0
        public void ExtraDataContainerDebuggerView_Items(ExtraDataContainerDebuggerView debugger,
                                                         IExtraDataContainer extraDataContainer)
        {
            extraDataContainer.KeyValuePairs.Returns(new[]
            {
                new KeyValuePair <object, object>(2, "World"),
                new KeyValuePair <object, object>(1, "Hello"),
            });

            var array = debugger.Items.ToArray();

            Assert.Equal(2, array.Length);
            Assert.Equal(1, array[0].Key);
            Assert.Equal("Hello", array[0].Value);
        }
Beispiel #4
0
        /// <summary>
        /// Get a value from extra data or return default. will convert
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="container"></param>
        /// <param name="key"></param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static T GetExtraDataOrDefaultValue <T>(this IExtraDataContainer container, object key, T defaultValue = default(T))
        {
            var value = container.GetExtraData(key);

            if (value == null)
            {
                return(defaultValue);
            }

            if (value is T)
            {
                return((T)value);
            }

            return((T)Convert.ChangeType(value, typeof(T)));
        }
        /// <summary>
        /// Get value from extra data provider
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <param name="dataProvider"></param>
        /// <param name="tValue"></param>
        /// <returns></returns>
        protected virtual bool GetValueFromExtraDataProvider <T>(object key, IExtraDataContainer dataProvider, out object tValue)
        {
            object value = null;

            if (key != null)
            {
                value = dataProvider.GetExtraData(key);
            }

            if (value != null)
            {
                tValue = value;
                return(true);
            }

            foreach (var o in dataProvider.KeyValuePairs)
            {
                if (o.Key is string stringKey &&
                    stringKey.StartsWith(UniqueStringId.Prefix))
                {
                    continue;
                }

                if (o.Value is T)
                {
                    tValue = o.Value;

                    return(true);
                }

                if (o.Value is Delegate delegateInstance &&
                    delegateInstance.GetMethodInfo().ReturnType == typeof(T))
                {
                    tValue = o.Value;

                    return(true);
                }
            }

            tValue = null;

            return(false);
        }
        protected virtual bool GetValueFromExtraDataProvider(Type type, object key, IExtraDataContainer dataProvider, out object tValue)
        {
            object value = null;

            if (key != null)
            {
                value = dataProvider.GetExtraData(key);
            }

            if (value != null)
            {
                tValue = value;
                return(true);
            }

            foreach (var o in dataProvider.Values)
            {
                if (type.GetTypeInfo().IsAssignableFrom(o.GetType().GetTypeInfo()))
                {
                    tValue = o;

                    return(true);
                }

                var delegateInstance = o as Delegate;

                if (delegateInstance != null &&
                    delegateInstance.GetMethodInfo().ReturnType == type)
                {
                    tValue = o;

                    return(true);
                }
            }

            tValue = null;

            return(false);
        }
 public static ITenant SetTenantContext(this IExtraDataContainer scopeData, ITenant tenant)
 => (ITenant)scopeData.SetExtraData(TENANT_KEY, tenant);
 public static TTenant GetTenantContext <TTenant>(this IExtraDataContainer scopeData) where TTenant : ITenant
 => (TTenant)scopeData.GetTenantContext();
 public static ITenant GetTenantContext(this IExtraDataContainer scopeData)
 => (ITenant)scopeData.GetExtraData(TENANT_KEY);
 /// <summary>
 /// Default constructor
 /// </summary>
 /// <param name="extraDataContainer"></param>
 public ExtraDataContainerDebuggerView(IExtraDataContainer extraDataContainer)
 {
     _extraDataContainer = extraDataContainer;
 }
Beispiel #11
0
 public static T GetExtraData <T>(this IExtraDataContainer container, object key)
 {
     return((T)container.GetExtraData(key));
 }