nancy2.0中如何将接口与实现分离?

How to separate interface from implementation in nancy2.0?

如您在 this link 中所见,可以将旧 nancy1.X 模块的生根和实现分开。现在定义这些路由的方式已经改变,我想知道如何编写相同的分离逻辑。

为清楚起见,定义 Get 路线的旧方法是:

Get["/{category}"] = parameters => "My category is " + parameters.category;

新方法是:

Get("/{category}", args => "My category is " + args.category);

将接口与实现分开的旧方法是:

Get["/favoriteNumber/{value:int}"] = FavoriteNumber;

private dynamic FavoriteNumber (dynamic parameters)
{
    return "So your favorite number is " + parameters.value + "?";
}

新方法是:

???

在尝试端点定义后,您可以使用 Func<dynamic,object> 类型规范(下面的#0)或方法的包装器(#1)。那是因为 Get 有几个重载,所以编译器需要这些提示来选择合适的一个。或者,如果方法 return 的任务可以在不换行的情况下指定(##23),例如异步方法总是 return 任务:

    Get("/favoriteNumber0/{value:int}", (Func<dynamic, object>)FavoriteNumberObject);
    Get("/favoriteNumber1/{value:int}", arg => FavoriteNumber(arg));
    Get("/favoriteNumber2/{value:int}", FavoriteNumberTask);
    Get("/favoriteNumber3/{value:int}", FavoriteNumberTaskCt);

...

private object FavoriteNumberObject(dynamic parameters)
{
    return "So your favorite number is " + parameters.value + "?";
}

private string FavoriteNumber(dynamic parameters)
{
    return "So your favorite number is " + parameters.value + "?";
}

private Task<string> FavoriteNumberTask(dynamic parameters)
{
    return Task.FromResult("So your favorite number is " + parameters["value"] + "?");
}

private Task<string> FavoriteNumberTaskCt(dynamic parameters, CancellationToken ctx)
{
    return Task.FromResult("So your favorite number is " + parameters["value"] + "?");
}