使用InSingletonScope和Ninject注入Facebook SDK包装是否正确?
我使用以下代码编写了一个围绕C#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
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”