Определение приложения или контекста сеанса - PullRequest
0 голосов
/ 09 августа 2011

Я хотел бы иметь возможность использовать некоторые из этих методов независимо от того, использую ли я токен аутентификации приложения или токен аутентификации пользователя, и мне нужен тест, чтобы определить, в каком контексте я нахожусь. Что-то вродеследующее:

    public FacebookClient GetFacebookClient() {
        return IsUserRequest() ? GetFacebookWebClient() : GetFacebookAppClient();
    }
    public dynamic GetUser(long fbId) {
        var fbClient = GetFacebookClient();
        return fbClient.Query(String.Format(@"SELECT uid,name FROM user WHERE uid = ({0})", fbId);
   }

Однако я не могу найти хороший тест для реализации IsUserRequest ().Есть идеи?

1 Ответ

0 голосов
/ 10 августа 2011

Я использовал синглтон для своего класса утилит Facebook, и поэтому я позволил себе только два: синглтон веб-контекста и синглтон контекста приложения.

public class FbUtil {
    private static readonly FbUtil webInstance = new FbUtil(false);
    private static readonly FbUtil appInstance = new FbUtil(true);
    static FbUtil() {}
    private FbUtil(bool isAppInstance) {
        IsAppInstance = isAppInstance;
    }
    private readonly bool IsAppInstance;
    public static FbUtil WebInstance {
        get { return webInstance; }
    }
    public static FbUtil AppInstance {
        get { return appInstance; }
    }
    public FacebookClient GetFacebookAppClient() {
        var oauth = new FacebookOAuthClient { AppId=Config.FacebookConfig.AppId, AppSecret=Config.FacebookConfig.AppSecret };
        dynamic tokenRes = oauth.GetApplicationAccessToken();
        return new FacebookClient(tokenRes.access_token);           
    }
    public FacebookClient GetFacebookWebClient() {
        return new FacebookWebClient();         
    }
    public FacebookClient GetFacebookClient() {
        return IsAppInstance ? GetFacebookAppClient() : GetFacebookWebClient();
    }
    public FbUser GetUser(long facebookId) {        
        var client = GetFacebookClient();
        dynamic result = client.Get(facebookId);
        return new FbUser(result);
    }
    ... etc. other FB utility methods
}

и я просто называю это так из своих бизнес-объектов:

  var fbUser = FbUtil.WebInstance.GetUser("12345");

или

  var fbUser = FbUtil.AppInstance.GetUser("12345");    

Это поддерживает интерфейс чистым, и я неу меня нет никаких избыточных методов.Если метод недоступен в контексте приложения, я выбрасываю исключение, которое не идеально, но на данный момент оно соответствует моим целям.Прабир, как ты относишься к этому подходу?

...