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 的任务可以在不换行的情况下指定(##2
,3
),例如异步方法总是 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"] + "?");
}
如您在 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 的任务可以在不换行的情况下指定(##2
,3
),例如异步方法总是 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"] + "?");
}