Esempio n. 1
0
        public override void Process(IReflector reflector, Type type, IMethodRemover methodRemover, ISpecificationBuilder specification)
        {
            IFacet facet = null;

            if (!type.IsInterface && typeof(IViewModel).IsAssignableFrom(type))
            {
                MethodInfo deriveMethod   = type.GetMethod("DeriveKeys", new Type[] {});
                MethodInfo populateMethod = type.GetMethod("PopulateUsingKeys", new[] { typeof(string[]) });

                var toRemove = new List <MethodInfo> {
                    deriveMethod, populateMethod
                };

                if (typeof(IViewModelEdit).IsAssignableFrom(type))
                {
                    facet = new ViewModelEditFacetConvention(specification);
                }
                else if (typeof(IViewModelSwitchable).IsAssignableFrom(type))
                {
                    MethodInfo isEditViewMethod = type.GetMethod("IsEditView");
                    toRemove.Add(isEditViewMethod);
                    facet = new ViewModelSwitchableFacetConvention(specification);
                }
                else
                {
                    facet = new ViewModelFacetConvention(specification);
                }
                methodRemover.RemoveMethods(toRemove.ToArray());
            }

            FacetUtils.AddFacet(facet);
        }
        public override IImmutableDictionary <string, ITypeSpecBuilder> Process(IReflector reflector, Type type, IMethodRemover methodRemover, ISpecificationBuilder specification, IImmutableDictionary <string, ITypeSpecBuilder> metamodel)
        {
            if (typeof(IViewModel).IsAssignableFrom(type))
            {
                IFacet facet;
                var    deriveMethod   = type.GetMethod("DeriveKeys", new Type[] { });
                var    populateMethod = type.GetMethod("PopulateUsingKeys", new[] { typeof(string[]) });

                var toRemove = new List <MethodInfo> {
                    deriveMethod, populateMethod
                };

                if (typeof(IViewModelEdit).IsAssignableFrom(type))
                {
                    facet = new ViewModelEditFacetConvention(specification);
                }
                else if (typeof(IViewModelSwitchable).IsAssignableFrom(type))
                {
                    var isEditViewMethod = type.GetMethod("IsEditView");
                    toRemove.Add(isEditViewMethod);
                    facet = new ViewModelSwitchableFacetConvention(specification);
                }
                else
                {
                    facet = new ViewModelFacetConvention(specification);
                }

                methodRemover.RemoveMethods(toRemove.ToArray());
                FacetUtils.AddFacet(facet);
            }

            return(metamodel);
        }