public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            TypeFilterAttribute typeFilterAttribute = attribute as TypeFilterAttribute;

            if (property.propertyType == SerializedPropertyType.ObjectReference)
            {
                EditorGUIUtils.DrawProperty(position, property, label);

                if (typeFilterAttribute != null)
                {
                    Type[] requiredTypes = typeFilterAttribute.types;

                    #region Preliminary Check

                    PreliminaryCheck(property, requiredTypes);

                    #endregion

                    #region Default Check

                    DefaultCheck(property, requiredTypes);

                    #endregion
                }
                else
                {
                    Debug.LogError("Failed to assign the attribute.");
                }
            }
            else
            {
                Debug.LogWarning("Type Filter Attribute supports only Object Reference fields.");
            }
        }
        public static IMiddlewarePlugin CreateMiddlewareInstance(this IServiceProvider serviceProvider, Type filterType)
        {
            var typeFilterAttribute = new TypeFilterAttribute(filterType)
            {
                Order = 0
            };
            var filterDescriptor  = new FilterDescriptor(typeFilterAttribute, 0);
            var instance          = serviceProvider.GetService(filterType);
            var iMiddlewarePlugin = (IMiddlewarePlugin)instance;

            return(iMiddlewarePlugin);
        }
Exemplo n.º 3
0
        public static FilterItem CreateFilterItem(this IServiceProvider serviceProvider, Type filterType)
        {
            var typeFilterAttribute = new TypeFilterAttribute(filterType)
            {
                Order = 0
            };
            var filterDescriptor = new FilterDescriptor(typeFilterAttribute, 0);
            var filterInstance   = serviceProvider.GetService(filterType);
            var filterMetaData   = (IFilterMetadata)filterInstance;
            var fi = new FilterItem(filterDescriptor, filterMetaData);

            return(fi);
        }
        private IMiddlewarePlugin CreateMiddlewareInstance(string filterType)
        {
            var type = TypeHelper <Type> .GetTypeByFullName(filterType);

            var typeFilterAttribute = new TypeFilterAttribute(type)
            {
                Order = 0
            };
            var filterDescriptor  = new FilterDescriptor(typeFilterAttribute, 0);
            var instance          = _serviceProvider.GetService(type);
            var iMiddlewarePlugin = (IMiddlewarePlugin)instance;

            return(iMiddlewarePlugin);
        }
        private static FilterItem CreateFilterItem(string filterType)
        {
            var authFilter = TypeHelper <Type> .GetTypeByFullName(filterType);

            var typeFilterAttribute = new TypeFilterAttribute(authFilter)
            {
                Order = -1
            };
            var filterDescriptor = new FilterDescriptor(typeFilterAttribute, -1);
            var filterMetaData   = (IFilterMetadata)Activator.CreateInstance(authFilter);
            var fi = new FilterItem(filterDescriptor, filterMetaData);

            return(fi);
        }
Exemplo n.º 6
0
        private FilterItem CreateFilterItem(string filterType)
        {
            var type = TypeHelper <Type> .GetTypeByFullName(filterType);

            var typeFilterAttribute = new TypeFilterAttribute(type)
            {
                Order = 0
            };
            var filterDescriptor = new FilterDescriptor(typeFilterAttribute, 0);
            var filterInstance   = _serviceProvider.GetService(type);
            var filterMetaData   = (IFilterMetadata)filterInstance;
            var fi = new FilterItem(filterDescriptor, filterMetaData);

            return(fi);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Adds a type representing an <see cref="IFilterMetadata"/>.
        /// </summary>
        /// <param name="filterType">Type representing an <see cref="IFilterMetadata"/>.</param>
        /// <param name="order">The order of the added filter.</param>
        /// <returns>An <see cref="IFilterMetadata"/> representing the added type.</returns>
        /// <remarks>
        /// Filter instances will be created using
        /// <see cref="Microsoft.Framework.DependencyInjection.ActivatorUtilities"/>.
        /// Use <see cref="AddService(Type)"/> to register a service as a filter.
        /// </remarks>
        public IFilterMetadata Add([NotNull] Type filterType, int order)
        {
            if (!typeof(IFilterMetadata).IsAssignableFrom(filterType))
            {
                var message = Resources.FormatTypeMustDeriveFromType(
                    filterType.FullName,
                    typeof(IFilterMetadata).FullName);
                throw new ArgumentException(message, nameof(filterType));
            }

            var filter = new TypeFilterAttribute(filterType)
            {
                Order = order
            };

            Add(filter);
            return(filter);
        }
Exemplo n.º 8
0
        /// <summary>
        ///     Adds a type to a <see cref="FilterCollection" /> if it doesn't already exist.
        /// </summary>
        /// <typeparam name="TType">The type of the t type.</typeparam>
        /// <param name="col">The col.</param>
        /// <param name="order">Filter order</param>
        /// <returns>FilterCollection.</returns>
        public static FilterCollection TryAdd <TType>(this FilterCollection col, int?order = null)
            where TType : IFilterMetadata
        {
            var vt = typeof(TType);

            if (col.All(t =>
            {
                // Yet more lameness, really should be able to do a simple test here...
                return(t switch
                {
                    TypeFilterAttribute tf => tf.ImplementationType != vt,
                    ServiceFilterAttribute sf => sf.ServiceType != vt,
                    FormatFilterAttribute ff => ff.GetType() != vt,
                    ResultFilterAttribute rs => rs.GetType() != vt,
                    ExceptionFilterAttribute ef => ef.GetType() != vt,
                    ActionFilterAttribute af => af.GetType() != vt,
                    _ => t.GetType() != vt
                });
            }
Exemplo n.º 9
0
        public void TypeFilterAttribute_InitializesCorrectValues()
        {
            // Arrange
            var filter = new TypeFilterAttribute(typeof(TestFilter));

            // Act
            var filterValues = new FilterValues(filter);

            // Assert
            Assert.True(filterValues.IsFactory);
            Assert.Equal(typeof(TestFilter), filterValues.FilterType);
            Assert.Equal(typeof(TypeFilterAttribute), filterValues.FilterMetadataType);
            Assert.Equal(
                new List <Type>()
            {
                typeof(IFilter), typeof(IExceptionFilter)
            },
                filterValues.FilterInterfaces);
        }
Exemplo n.º 10
0
    public void CreateService_TypeActivatesImplementationType()
    {
        // Arrange
        var value           = "Some value";
        var uri             = new Uri("http://www.asp.net");
        var serviceProvider = new ServiceCollection()
                              .AddSingleton(value)
                              .AddSingleton(uri)
                              .BuildServiceProvider();

        var typeFilter = new TypeFilterAttribute(typeof(TestFilter));

        // Act
        var filter = typeFilter.CreateInstance(serviceProvider);

        // Assert
        var testFilter = Assert.IsType <TestFilter>(filter);

        Assert.Same(value, testFilter.Value);
        Assert.Same(uri, testFilter.Uri);
    }
Exemplo n.º 11
0
    public void CreateService_UnwrapsFilterFactory()
    {
        // Arrange
        var value           = "Some value";
        var uri             = new Uri("http://www.asp.net");
        var serviceProvider = new ServiceCollection()
                              .AddSingleton("Value in DI")
                              .AddSingleton(uri)
                              .BuildServiceProvider();

        var typeFilter = new TypeFilterAttribute(typeof(TestFilterFactory))
        {
            Arguments = new[] { value, }
        };

        // Act
        var filter = typeFilter.CreateInstance(serviceProvider);

        // Assert
        var testFilter = Assert.IsType <TestFilter>(filter);

        Assert.Same(value, testFilter.Value);
        Assert.Same(uri, testFilter.Uri);
    }