Example #1
0
        public MethodRoute Resolve(string methodLocator)
        {
            if (string.IsNullOrWhiteSpace(methodLocator))
            {
                throw new ArgumentNullException("methodLocator");
            }

            MethodRoute route = null;

            if (!_routeCache.TryGetValue(methodLocator, out route) || route == null)
            {
                throw new InvalidOperationException(string.Format(
                                                        "Cannot resolve method route [{0}].", methodLocator));
            }

            return(route);
        }
Example #2
0
        public MethodRouteCache BuildCache(IEnumerable <ServiceEntry> entries)
        {
            var cache = new MethodRouteCache();

            foreach (var entry in entries)
            {
                var serviceType     = entry.DeclaringType;
                var serviceInstance = entry.ServiceInstance;

                var methods = serviceType.GetMethods();
                foreach (var method in methods)
                {
                    var methodLocator  = _extractor.Extract(method);
                    var methodInstance = serviceInstance.GetType()
                                         .GetMethod(method.Name, method.GetParameters().Select(p => p.ParameterType).ToArray());

                    var methodRoute = new MethodRoute(methodLocator, serviceInstance, methodInstance);
                    cache.Add(methodRoute.Locator, methodRoute);
                }
            }

            return(cache);
        }