Как отделить интерфейс от реализации в nancy2.0? - PullRequest
5 голосов
/ 03 июня 2019

Как вы можете видеть по этой ссылке , можно было отделить рутинг и реализацию старых модулей 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 Ответ

1 голос
/ 03 июня 2019

После экспериментов с определениями конечных точек вы можете использовать либо спецификацию типа Func<dynamic,object> (# 0 ниже), либо оболочку для метода (# 1). Это потому, что есть несколько перегрузок Get, поэтому компилятору требуются эти подсказки, чтобы выбрать правильный. В качестве альтернативы, если метод возвращает задание, его можно указать без переноса (## 2, 3), например, Асинхронные методы всегда возвращают задачу:

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