我希望能够使用一些相同的方法,无论我是否使用app auth令牌或用户身份验证令牌,并且需要测试来确定我在哪个上下文。类似于以下内容:
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 :(得分:0)
我在我的Facebook实用程序类中使用单例,所以我只允许两个:web上下文单例和app上下文单例。
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");
这样可以保持界面清洁,而且我没有任何冗余方法。如果某个方法在app上下文中无法使用,我会抛出一个异常,这是不理想的,但它现在适合我的目的。 prabir,你觉得这种做法怎么样?