如何声明 lambda 属性 一次以供重复使用?

How can I declare a lambda property once for re-use?

我的启动程序中有此代码class...

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

哪个不行...

如何重复使用同一个集合并引用一次?我已经用谷歌搜索了 "lambda variable re-use" 和等效项,但我看不到前进的方向。

如果您检查 documentation,您可以看到参数类型是 Action<HubRouteBuilder>。这是您需要构建的,以便能够重新使用它。

Action<HubRouteBuilder> routeAction = routes => { routes.MapHub<RouteUpdate>("/routeupdate"); };

if (env.IsDevelopment())
{
    app.UseSignalR(routeAction);
}
else
{
    app.UseAzureSignalR(routeAction);
}

由于您需要提供一个 Action<HubRouteBuilder>(这是一个基本上描述 "method that takes a HubRouteBuilder and returns void" 的委托类型),您可以定义一个方法或局部函数并在以后引用它:

void configureRoute(HubRouteBuilder routes) 
    => routes.MapHub<RouteUpdate>("/routeupdate");

if (env.IsDevelopment())
    app.UseSignalR(configureRoute);
else
    app.UseAzureSignalR(configureRoute);