【发布时间】:2017-04-26 09:34:56
【问题描述】:
我正在开发 PCL,它除了提供许多功能外还提供登录功能。另外,我最近开始使用代理。
当前案例:
我有一个 Simple 方法,它接受参数并提供 GPlus、Facebook 或 Simple logIn 以及用户名和密码。如下代码:
public async Task<SignInResponse> SignInUsingFacebook(IFacebookInitializer faceBookConfiguration)
{
//my code
}
public async Task<SignInResponse> SignInUserNameAndPass(string username,string password)
{
//my code
}
public async Task<SignInResponse> SignInUsingGPlus(IGPlusInitializer gPlusConfiguration)
{
//my code
}
这很好,我可以直接从我的应用程序中调用它们并处理数据,但是,
我最近遇到了Delegates 和Func<T,TResult>
我想做什么:
我想要一个简单的方法,它接受LogInType 的枚举参数,如下所示:
public enum LogInType
{
UserNameAndPassword,
Facebook,
GooglePlus,
}
并根据提供给方法的登录类型的类型,自行处理登录过程并仅返回SignInResponse 对象。
有没有一种方法可以使用委托来完成。而不是为每个案例调用 3 个单独的方法。如果是,那么有人可以帮助将参数与 LogInType 一起传递给 Single 方法。我知道它必须是 Func,但 Func 看起来像什么,因为它必须采用 3 个不同的参数。
来自评论:
这些方法中的每一个都是不同的签名,所以你有一个Func<IFacebookInitializer、Task<SignInResponse>>、Func<string, string, Task<SignInResponse>> 和Func<IGPlusInitializer, Task<SignInResponse>>,所以你仍然会得到一个 if 语句。
我可以在调用方法时返回 Func 吗?通过这种方式,我可以基于快速切换案例返回三个 func 中的任何一个。问题是(如果可能的话)返回这三种方法中的任何一种的方法的通用响应(或通用响应)类型是什么
【问题讨论】:
-
与其传递一个枚举并争先恐后地将参数获取到方法中,为什么不创建一个抽象参数类并为三个登录变体中的每一个创建一个子类?
-
这些方法中的每一个都是不同的签名,所以你有一个
Func<IFacebookInitializer, Task<SignInResponse>>、Func<string, string, Task<SignInResponse>>和Func<IGPlusInitializer, Task<SignInResponse>>,所以你仍然会得到一个 if 语句。 -
@Kempeth 我确实尝试过,但与我遇到的 Func 相比,它并没有太大的不同。
-
@DavidG 调用该方法时我可以返回一个 Func 吗?通过这种方式,我可以根据快速切换案例返回三个
func中的任何一个。问题将是(如果可能的话)返回这三种方法中的任何一种的方法的通用响应(或通用响应)类型是什么