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

时间:2019-06-03 14:47:27

标签: c# nancy

正如您在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 + "?";
}

新方法是:

???

1 个答案:

答案 0 :(得分:1)

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

    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"] + "?");
}