Pergunta

Tenho meu aplicativo Web ASP.NET MVC 3 instalado e funcionando com o SDK C# do Facebook.

Seguindo as instruções aqui, parece que depois de inserir o AppId/Segredo na seção de configuração da web instruída, essas são as configurações retiradas ao usar FacebookApplication.Current, por exemplo:

var oAuthClient = new FacebookOAuthClient(FacebookApplication.Current) 
{
   RedirectUri = new Uri(RedirectUrl)
};

Meu aplicativo da Web tem "marca branca", portanto atende dois sites, com dois aplicativos do Facebook separados.

Anteriormente, quando implementei o Facebook Connect, eu tinha uma propriedade global chamada "FacebookApplicationId", que analisava o domínio e descobria qual ID do aplicativo usar.

Existe uma maneira elegante de fazer isso com o SDK C# do Facebook?

Eu poderia simplesmente fazer isso:

var oAuthClient = new FacebookOAuthClient(FacebookApplication.Current) 
{
     RedirectUri = new Uri(RedirectUrl),
     AppId = ManuallyGetTheRightAppIdBasedOnDomain(),
     AppSecret = ManuallyGetTheRightAppSecretBasedOnDomain()
};

Mas isso não parece SECO, pois terei que continuar fazendo isso.

Existe uma maneira de colocar alguma inteligência FacebookApplication.Current, para que o AppId e AppSecret as propriedades já estão definidas?

Aberto a toda e qualquer sugestão.

Foi útil?

Solução

Acho que entendi:o diretor para FacebookOAuthClient Leva um IFacebookApplication.

Então eu criei uma implementação concreta chamada WhiteLabeledFacebookApplication, que implementa IFacebookApplication.

WhiteLabeledFacebookApplicationo ctor leva um WebsiteType enum, então as propriedades para AppId e AppSecret leia os valores relevantes do web.config com base no enum passado no ctor.

Então, na minha FacebookController, (onde faço todas as coisas do FB), tenho uma propriedade privada chamada CurrentFacebookApplication:

private IFacebookApplication _currentFacebookApplication;
private IFacebookApplication CurrentFacebookApplication
{
   get
   {
      if (_currentFacebookApplication == null)
      {
         var websiteType = SomeUnimportantCodeWhichWorksOutWebsiteFromUrl();
         _currentFacebookApplication = new WhiteLabeledFacebookApplication(websiteType );
      }

      return _currentFacebookApplication;
   }
}

Então eu posso fazer isso:

var oAuthClient = new FacebookOAuthClient(CurrentFacebookApplication) 
{
   RedirectUri = new Uri(RedirectUrl)
};

E o AppId/Secret correto será retirado - ótimo!

A única coisa que eu gostaria de poder fazer é usar injeção de dependência, mas durante a construção de controladores, não há HttpContext então não consigo descobrir o tipo de site.

Ainda assim, funciona bem - bastante SECO.

Tiramos o chapéu para os desenvolvedores pelo kit de ferramentas para usar programação orientada por interface.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top