private RequestDispatcher BuildRequestDispatcher(IModuleContainer container) { var moduleCatalog = new ModuleCatalog( () => { return(container.GetAllModules()); }, (Type moduleType) => { return(container.GetModule(moduleType)); } ); var routeSegmentExtractor = new RouteSegmentExtractor(); var routeDescriptionProvider = new RouteDescriptionProvider(); var routeCache = new RouteCache(routeSegmentExtractor, routeDescriptionProvider); routeCache.BuildCache(moduleCatalog.GetAllModules()); var trieNodeFactory = new TrieNodeFactory(); var routeTrie = new RouteResolverTrie(trieNodeFactory); routeTrie.BuildTrie(routeCache); var serializers = new List <ISerializer>() { new JsonSerializer(), new XmlSerializer() }; var responseFormatterFactory = new ResponseFormatterFactory(serializers); var moduleBuilder = new ModuleBuilder(responseFormatterFactory); var routeResolver = new RouteResolver(moduleCatalog, moduleBuilder, routeTrie); var negotiator = new ResponseNegotiator(); var routeInvoker = new RouteInvoker(negotiator); var requestDispatcher = new RequestDispatcher(routeResolver, routeInvoker); return(requestDispatcher); }
public RouteResolver( ModuleCatalog catalog, ModuleBuilder moduleBuilder, RouteResolverTrie routeTrie) { if (catalog == null) { throw new ArgumentNullException("catalog"); } if (moduleBuilder == null) { throw new ArgumentNullException("moduleBuilder"); } if (routeTrie == null) { throw new ArgumentNullException("routeTrie"); } _catalog = catalog; _moduleBuilder = moduleBuilder; _routeTrie = routeTrie; }