Правильно ли внедрять оболочку Facebook SDK с помощью InSingletonScope с Ninject? - PullRequest
0 голосов
/ 03 августа 2011

Я написал оболочку для 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 голосов
/ 04 августа 2011

Я не думаю, что необходимо создавать новый интерфейс для работы с FacebookOAuthClient.GetLoginUrl или FacebookOAuthResult.Parse

GetLoginUrl и ParseResult из FacebookOAuthClient уже виртуальны.(убедитесь, что вы находитесь по крайней мере на версии 5.0.35, чтобы получить FacebookOAuthClient.ParseResult, который делает то же самое, что FacebookOAuthResult.Parse.)

Затем используйте инъекцию конструктора ninject, чтобы установить IFacebookApplication для FacebookOAuthClient.

Вы также можете использовать инъекцию в конструктор для установки токена доступа для FacebookClient.(это если вы не хотите иметь более простые методы для публикации на стене и т. д.) Или вы также можете обойтись без маркера доступа и установить FacebookClient.AccessToken = "access_token"

0 голосов
/ 03 августа 2011

Я ничего не знаю о Facebook SDK.Но, как правило, если реализация не имеет состояния, то синглтон - это правильная область.Я предполагаю, что это так с вашей реализацией.

...