使用InSingletonScope和Ninject注入Facebook SDK包装器是否正确?

时间:2011-08-02 21:51:13

标签: ninject facebook-c#-sdk ninject-2

我已经编写了一个围绕C#Facebook SDK的包装器,使用以下代码:

public interface IFacebookService
{
    Uri GetLoginUri(string returnUrl);

    FacebookResult OAuth(string url, string code);

    void Post(string message, string accessToken);
}

实现如下:

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
    }
}

我使用Ninject将其注入需要使用oauth执行登录并将其发布到用户Facebook墙。

我目前使用以下配置:

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

使用InSingletonScope是否正确?由于这是第三方库,我不确定这是否是正确的方法,因为所有线程都将共享该实例。

2 个答案:

答案 0 :(得分:0)

我不了解Facebook SDK。但作为一般规则,如果实现是无状态的,则单例是正确的范围。我假设你的实现就是这种情况。

答案 1 :(得分:0)

我认为没有必要创建一个新界面来处理FacebookOAuthClient.GetLoginUrl或FacebookOAuthResult.Parse

FacebookOAuthClient的GetLoginUrl和ParseResult已经是虚拟的。 (确保你至少在v5.0.35上获得与FacebookOAuthResult.Parse相同的FacebookOAuthClient.ParseResult。)

然后使用构造函数注入ninject为FacebookOAuthClient设置IFacebookApplication。

您还可以使用构造函数注入来为FacebookClient设置访问令牌。 (除非你想要更简单的方法发布到墙上等等。) 或者您也可以不使用访问令牌,并设置FacebookClient.AccessToken =“access_token”

相关问题