Я работаю над PCL, который наряду с большим количеством функций также обеспечивает вход в систему. Также недавно я начал использовать делегатов.
Текущий случай:
У меня есть простые методы, которые принимают параметры и предоставляют 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 отдельных метода для вызова для каждого случая. Если да, то может кто-нибудь помочь с параметрами, которые будут переданы методу Single вместе с LogInType. Я знаю, что это должен быть Func
, но как будет выглядеть Func
, поскольку он должен принимать 3 разных параметра.
Из комментариев:
Каждый из этих методов в любом случае представляет собой другую сигнатуру, поэтому у вас есть Func<IFacebookInitializer
, Task<SignInResponse>>
, Func<string, string, Task<SignInResponse>>
и Func<IGPlusInitializer, Task<SignInResponse>>
, поэтому вы все равно получите оператор if.
Могу ли я вернуть Func при вызове метода? Таким образом, я могу вернуть любую из трех функций на основе случая быстрого переключения. Проблема будет заключаться (если это возможно) в том, что будет типом общего ответа (или общего ответа) метода, который возвращает любой из этих трех методов.
Func<IFacebookInitializer, Task<SignInResponse>>
,Func<string, string, Task<SignInResponse>>
иFunc<IGPlusInitializer, Task<SignInResponse>>
, поэтому вы все равно получите оператор if. - person DavidG   schedule 26.04.2017func
на основе случая быстрого переключения. Проблема будет заключаться (если это возможно) в том, что будет типом общего ответа (или общего ответа) метода, который возвращает любой из этих трех методов. - person iam.Carrot   schedule 26.04.2017