2011-08-09 3 views
0

앱 인증 토큰 또는 사용자 인증 토큰을 사용하는지 여부에 관계없이 동일한 방법을 사용할 수 있기를 원하며 어떤 컨텍스트인지 확인하는 테스트가 필요합니다. 에 다음과 같은 뭔가 :.앱 또는 세션 컨텍스트 결정

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을 구현하는 좋은 테스트를 찾을 수 없습니다(). 어떤 아이디어?

+0

IsUserRequest()를 자동화하는 것이 좋지 않을 것입니다. 사용자 또는 앱인 액세스 토큰을 명시 적으로 지정하면 더 좋습니다. – prabir

+0

문제는 이것입니다 : 나는 비즈니스 로직에서 페이스 북 유틸리티를 분리하려고 노력하고 있는데, 다음과 같은 일을 피하려고합니다 :'public bool GetUserFromSession()'과'public bool GetUserFromApp()' 나에게 상당히 과분하다. 비즈니스 로직이이를 알지 못하기 때문에 FacebookClient를 매개 변수로 전달하기를 원하지 않습니다. 나는 아래의 괜찮은 해결책을 생각해 냈다. 그리고 네 말이 맞아, 사용할 토큰을 명시 적으로 선택해야한다. – dcpar

답변

0

필자는 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");  

이 깨끗한 인터페이스를 유지하고, 나는 어떤 중복 방법이 없습니다. 앱 컨텍스트에서 메소드를 사용할 수없는 경우 예외가 발생하지만 이상적이지는 않지만 지금은 내 목적에 부합합니다. prabir,이 접근법에 대해 어떻게 생각하세요?

관련 문제