У меня есть этот код в моем классе запуска...
if (env.IsDevelopment())
{
app.UseSignalR(routes => { routes.MapHub<RouteUpdate>("/routeupdate"); });
}
else
{
app.UseAzureSignalR(routes => { routes.MapHub<RouteUpdate>("/routeupdate"); });
}
Я также пытался сделать это.
var routesCollection = new ServiceRouteBuilder(routes =>
{
routes.MapHub<RouteUpdate>(nameof(RouteUpdate));
});
Что не работает...
Как я могу повторно использовать одну и ту же коллекцию и ссылаться на нее один раз? Я погуглил «повторное использование лямбда-переменной» и эквивалент, и я не вижу пути вперед.
Если вы проверите документация, вы увидите, что тип параметра — Action<HubRouteBuilder>
. Это то, что вам нужно построить, чтобы иметь возможность использовать его повторно.
Action<HubRouteBuilder> routeAction = routes => { routes.MapHub<RouteUpdate>("/routeupdate"); };
if (env.IsDevelopment())
{
app.UseSignalR(routeAction);
}
else
{
app.UseAzureSignalR(routeAction);
}
Поскольку вам нужно предоставить Action<HubRouteBuilder>
(это тип делегата, который в основном описывает «метод, который принимает HubRouteBuilder
и возвращает void»), вы можете определить метод или локальную функцию и ссылаться на нее позже:
void configureRoute(HubRouteBuilder routes)
=> routes.MapHub<RouteUpdate>("/routeupdate");
if (env.IsDevelopment())
app.UseSignalR(configureRoute);
else
app.UseAzureSignalR(configureRoute);
Это будет что-то вроде
Action<Routes> x = routes => { routes.MapHub<RouteUpdate>("/routeupdate"); }
.