代码较少:请看下方:
public class RouteBuilder : IRouteBuilder
{
public RouteBuilder()
{
Routes = new List<IRouter>();
}
// 这里是在MVC 部分定义的 MvcRouteHandler
public IRouter DefaultHandler { get; set; }
public IServiceProvider ServiceProvider { get; set; }
// 实现IRouter 接口的集合 如:TemplateRoute
public IList<IRouter> Routes
{
get;
private set;
}
public IRouter Build()
{
var routeCollection = new RouteCollection();
foreach (var route in Routes)
{
routeCollection.Add(route);
}
return routeCollection;
}
}
这个类常用的是其定义的扩展方法:
public static IRouteBuilder MapRoute(this IRouteBuilder routeCollectionBuilder,
string name,
string template,
object defaults,
object constraints,
object dataTokens)
{
//调用此方法前必须指定 DefaultHandler (MvcRouteHandler)
if (routeCollectionBuilder.DefaultHandler == null)
{
throw new InvalidOperationException(Resources.DefaultHandler_MustBeSet);
}
// 调用此方法前必须添加: DefaultInlineConstraintResolver
var inlineConstraintResolver = routeCollectionBuilder
.ServiceProvider
.GetRequiredService<IInlineConstraintResolver>();
routeCollectionBuilder.Routes.Add(new TemplateRoute(routeCollectionBuilder.DefaultHandler,
name,
template,
ObjectToDictionary(defaults),
ObjectToDictionary(constraints),
ObjectToDictionary(dataTokens),
inlineConstraintResolver));
return routeCollectionBuilder;
}
浙公网安备 33010602011771号