main
 1using System.Collections.Generic;
 2using System.Linq;
 3using System.Reflection;
 4using gorilla.commons.infrastructure.thirdparty.Castle.DynamicProxy.Interceptors;
 5
 6namespace gorilla.commons.infrastructure.thirdparty.Castle.DynamicProxy
 7{
 8    public class CastleDynamicInterceptorConstraint<TypeToPutConstraintOn> : InterceptorConstraint<TypeToPutConstraintOn>
 9    {
10        readonly MethodCallTracker<TypeToPutConstraintOn> call_tracker;
11        bool intercept_all_calls;
12
13        public CastleDynamicInterceptorConstraint(MethodCallTracker<TypeToPutConstraintOn> call_tracker)
14        {
15            this.call_tracker = call_tracker;
16        }
17
18        public TypeToPutConstraintOn intercept_on
19        {
20            get { return call_tracker.target; }
21        }
22
23        public void intercept_all()
24        {
25            intercept_all_calls = true;
26        }
27
28        public IEnumerable<string> methods_to_intercept()
29        {
30            return intercept_all_calls ? gell_all_methods() : call_tracker.methods_to_intercept();
31        }
32
33        IEnumerable<string> gell_all_methods()
34        {
35            return all_methods().Select(x => x.Name);
36        }
37
38        IEnumerable<MethodInfo> all_methods()
39        {
40            return typeof (TypeToPutConstraintOn).GetMethods(BindingFlags.Public | BindingFlags.Instance);
41        }
42    }
43}