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