【问题标题】:How to separate interface from implementation in nancy2.0?如何在nancy2.0中将接口与实现分开?
【发布时间】:2019-06-04 02:21:02
【问题描述】:

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

而新的方法是:

???

【问题讨论】:

    标签: c# nancy


    【解决方案1】:

    在对端点定义进行试验后,您可以使用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"] + "?");
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2020-07-03
      • 2012-03-01
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多