2011-08-02 9 views
0

私はFacebookのSDKには、次のコードをusign C#の周りのラッパーを書いた:NinjectでInSingletonScopeを使用してFacebook SDKラッパーを挿入するのは正しいですか?

public interface IFacebookService 
{ 
    Uri GetLoginUri(string returnUrl); 

    FacebookResult OAuth(string url, string code); 

    void Post(string message, string accessToken); 
} 

のように実装が見えます:OAuthのを使用してログインを実行するために必要なところ、私はこれを注入するNinjectを使用

public class FacebookService : IFacebookService 
{ 
    public Uri GetLoginUri(string returnUrl) 
    { 
     var oAuthClient = new FacebookOAuthClient(FacebookApplication.Current); 

     // code removed for simplicity 

     return uri; 
    } 

    public FacebookResult OAuth(string url, string code) 
    { 
     FacebookOAuthResult oauthResult; 

     if (FacebookOAuthResult.TryParse(url, out oauthResult)) 
     { 
      // code removed for simplicity 
     } 

     return result; 
    } 

    public void Post(string message, string accessToken) 
    { 
     var client = new FacebookClient(accessToken); 

     // code removed for simplicity 
    } 
} 

とユーザーのFacebookの壁に投稿します。私は現在、これを使用して設定した

kernel.Bind<IFacebookService>().To<FacebookService>().InSingletonScope(); 

はInSingletonScopeを使用することが正しいですか?これはサードパーティライブラリであるため、すべてのスレッドがインスタンスを共有するため、これが適切な方法であるかどうかはわかりません。

答えて

0

私はFacebook SDKについて知りません。しかし、一般的なルールとして、実装がステートレスな場合は、シングルトンが正しいスコープです。私はあなたの実装でこれが当てはまると仮定します。

0

私はFacebookOAuthClient.GetLoginUrlまたはFacebookOAuthClientのFacebookOAuthResult.Parse

GetLoginUrlとParseResultに対処するための新しいインタフェースを作成する必要があるとは思わない、すでに仮想です。 (FacebookOAuthResult.Parseと同じことをするFacebookOAuthClient.ParseResultを取得するには、少なくともv5.0.35以上であることを確認してください)

ninjectのコンストラクタインジェクションを使用してFacebookOAuthClientのIFacebookApplicationを設定します。

また、コンストラクタインジェクションを使ってFacebookClientのアクセストークンを設定することもできます。 (壁に掲示するなどの簡単な方法が必要な場合を除き) アクセストークンなしで行うこともできますし、FacebookClient.AccessToken = "access_token"を設定する

+0

いくつかコードを投稿できますか? – Thomas