public RouteResolver( IActivityMonitor monitor, RouteConfiguration c )
{
try
{
using( monitor.OpenGroup( LogLevel.Info, c.Name.Length > 0 ? string.Format( "Resolving root configuration (name is '{0}').", c.Name ) : "Resolving root configuration.", null ) )
{
ProtoResolver protoResolver = new ProtoResolver( monitor, c );
NamedSubRoutes = new Dictionary<string, SubRouteConfigurationResolved>();
using( monitor.OpenGroup( LogLevel.Info, "Building final routes.", null ) )
{
var preRoot = new PreRoute( monitor, protoResolver.Root );
Root = new RouteConfigurationResolved( protoResolver.Root.FullName, c.ConfigData, preRoot.FinalizeActions() );
foreach( IProtoSubRoute sub in protoResolver.NamedSubRoutes.Values )
{
var preRoute = new PreRoute( monitor, sub );
NamedSubRoutes.Add( sub.FullName, new SubRouteConfigurationResolved( sub, preRoute.FinalizeActions() ) );
}
Root.SubRoutes = protoResolver.Root.SubRoutes.Select( p => NamedSubRoutes[p.FullName] ).ToArray();
foreach( IProtoSubRoute sub in protoResolver.NamedSubRoutes.Values )
{
NamedSubRoutes[sub.FullName].SubRoutes = sub.SubRoutes.Select( p => NamedSubRoutes[p.FullName] ).ToArray();
}
}
}
}
catch( Exception ex )
{
monitor.SendLine( LogLevel.Fatal, null, ex );
}
}
}