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); }
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); }
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); }
/// <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); }
/// <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 }); }
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); }
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); }
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); }