Exemple #1
0
        private IEnumerable <MethodImplementationInfo> DoGetInterceptableMethods(Type implementationType)
        {
            var interceptableMethodsToInterfaceMap = new Dictionary <MethodInfo, MethodInfo>();

            foreach (MethodInfo method in
                     implementationType.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
            {
                if (MethodOverride.MethodCanBeIntercepted(method))
                {
                    interceptableMethodsToInterfaceMap[method] = null;
                }
            }

            foreach (Type itf in implementationType.GetInterfaces())
            {
                var mapping = implementationType.GetInterfaceMap(itf);
                for (int i = 0; i < mapping.InterfaceMethods.Length; ++i)
                {
                    if (interceptableMethodsToInterfaceMap.ContainsKey(mapping.TargetMethods[i]))
                    {
                        interceptableMethodsToInterfaceMap[mapping.TargetMethods[i]] = mapping.InterfaceMethods[i];
                    }
                }
            }

            foreach (var kvp in interceptableMethodsToInterfaceMap)
            {
                yield return(new MethodImplementationInfo(kvp.Value, kvp.Key));
            }
        }
Exemple #2
0
 MethodDef?LookupOverride(MethodOverride o)
 {
     if (!methodOverrides.TryGetValue(o.MethodDeclaration, out var info))
     {
         return(null);
     }
     if (!comparer.Equals(info.MethodDeclaration.DeclaringType, o.MethodDeclaration.DeclaringType))
     {
         return(null);
     }
     return(info.TargetMethod);
 }
Exemple #3
0
        public static AppFunc OwinApp(IDictionary <string, object> startupEnv = null)
        {
            var app =
                new List <Func <AppFunc, AppFunc> >()
                .Use(H5bp.IeEdgeChromeFrameHeader())
                .Use(H5bp.RemovePoweredBy())
                .Use(H5bp.CrossDomainRules())
                .Use(JsonBodyParser.Middleware())
                .Use(UrlEncoded.Middleware())
                .Use(MethodOverride.Middleware());

            var router   = new RegexRouter(app);
            var template = new RazorEngine.Templating.TemplateService();

            router.Get("/", next =>
                       async env =>
            {
                await env.GetResponseBody()
                .WriteStringAsync("hi");
            });

            template.Compile("Hi @Model.name", typeof(DynamicObject), "/hi");
            router.Get(@"/hi/(?<name>((.)*))$", next =>
                       async env =>
            {
                var routeParameters = env.GetSimpleOwinRouteParameters();

                string html = template.Run("/hi", new { name = routeParameters["name"] }.ToDynamicObject());

                await env.GetResponseBody()
                .WriteStringAsync(html);
            });

            router.Get("/hello", next =>
                       async env =>
            {
                await env.GetResponseBody()
                .WriteStringAsync("Hello");
            });

            router.All("*", NotFound.Middleware());

            return(app.ToOwinApp());
        }
Exemple #4
0
        private static bool IsMatchingOverride(MethodOverride methodOverride, IMethodDefOrRef targetMethod)
        {
            SigComparer comparer = default;

            var targetDeclTypeDef   = targetMethod.DeclaringType.ResolveTypeDef();
            var overrideDeclTypeDef = methodOverride.MethodDeclaration.DeclaringType.ResolveTypeDef();

            if (!comparer.Equals(targetDeclTypeDef, overrideDeclTypeDef))
            {
                return(false);
            }

            var targetMethodSig   = targetMethod.MethodSig;
            var overrideMethodSig = methodOverride.MethodDeclaration.MethodSig;

            targetMethodSig   = ResolveGenericSignature(targetMethod, targetMethodSig);
            overrideMethodSig = ResolveGenericSignature(methodOverride.MethodDeclaration, overrideMethodSig);

            return(comparer.Equals(targetMethodSig, overrideMethodSig));
        }
Exemple #5
0
        private static bool IsMatchingOverride(MethodOverride methodOverride, IMethodDefOrRef targetMethod)
        {
            SigComparer comparer = default;

            var targetDeclTypeDef   = targetMethod.DeclaringType.ResolveTypeDef();
            var overrideDeclTypeDef = methodOverride.MethodDeclaration.DeclaringType.ResolveTypeDef();

            if (!comparer.Equals(targetDeclTypeDef, overrideDeclTypeDef))
            {
                return(false);
            }

            var targetMethodSig   = targetMethod.MethodSig;
            var overrideMethodSig = methodOverride.MethodDeclaration.MethodSig;

            if (methodOverride.MethodDeclaration.DeclaringType is TypeSpec spec && spec.TypeSig is GenericInstSig genericInstSig)
            {
                overrideMethodSig = GenericArgumentResolver.Resolve(overrideMethodSig, genericInstSig.GenericArguments);
            }

            return(comparer.Equals(targetMethodSig, overrideMethodSig));
        }
 void InitializeFrom(MethodOverrideOptions options) => methodOverride = options.Create();
Exemple #7
0
 public MethodOverrideOptions(MethodOverride mo)
 {
     this.MethodBody        = mo.MethodBody;
     this.MethodDeclaration = mo.MethodDeclaration;
 }
Exemple #8
0
 void Add(MethodOverride mo)
 {
     // It's a struct so can't be null
     Push(mo.MethodBody);
     Push(mo.MethodDeclaration);
 }