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

使用InSingletonScope和Ninject注入Facebook SDK包装是否正确?,ninject,facebook-c#-sdk,ninject-2,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 FacebookServi

我使用以下代码编写了一个围绕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();
kernel.Bind().To().InSingletonScope();

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

我不了解Facebook SDK。但是作为一般规则,如果实现是无状态的,那么singleton是正确的范围。我假设您的实现就是这样。

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

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

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

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