使IAuthorizo​​r或TwitterContext全球/可访问

时间:2017-09-13 23:19:46

标签: twitter linq-to-twitter

还有一个跟进Extract BearerToken from LinqToTwitter IAuthorizer

我在我的应用程序中成功使用了Auth / Context / BearerToken但是我现在想使用L2T库检查费率。我需要TwitterContext这样做,但我现在已经超出了twitterCtx范围。

是否可以将其设置为公共类,以便我可以从任何地方访问它而无需重新授权?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

有不同的方法可以做到这一点。这里有几个你可以去Singleton路线或工厂方法。

  

注意: 关于Singleton是否适合使用的模式或者对象的全局引用是否均匀存在争议   适当的,但那不是你要问的。

public class TwitterContextService
{
    static TwitterContext twitterCtx;
    public static TwitterContext Instance
    {
        get
        {
            if (twitterCtx == null)
                twitterCtx = CreateTwitterContext();

            return twitterCtx;
        }
    }

    public static TwitterContext CreateTwitterContext()
    {
        var auth = new ApplicationOnlyAuthorizer()
        {
            CredentialStore = new InMemoryCredentialStore
            {
                ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),
                ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret)
            },
        };

        return new TwitterContext(auth);
    }
}

然后有两种方法可以使用它 -

作为单身人士:

TwitterContext twitterCtx = TwitterContextService.Instance;

或作为工厂方法:

TwitterContext twitterCtx = TwitterContextService.CreateTwitterContext();

或者,您可以使用IoC容器(Web上的大量信息和可用库)并将依赖项传递到使用TwitterContext的代码中。我想有几种不同的方法可以做到这一点。