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