Facebook C # SDK Authentication - Как работать с несколькими «приложениями» в одном приложении? - PullRequest
2 голосов
/ 31 марта 2011

У меня запущено и работает мое веб-приложение ASP.NET MVC 3 с SDK Facebook C #.

Следуя инструкциям здесь , создается впечатление, что после вводаУказан AppId / Secret в разделе веб-конфигурации, то есть параметры, которые были восстановлены при использовании FacebookApplication.Current, например:

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

Мое веб-приложение имеет «белую метку», поэтому оно обслуживает два веб-сайта с двумя отдельнымиПриложения Facebook.

Ранее, когда я реализовал Facebook Connect, у меня было глобальное свойство, называемое FacebookApplicationId, которое просматривало домен и определяло, какой идентификатор приложения использовать.

Есть ли изящныйспособ сделать это с помощью Facebook C # SDK?

Я мог бы просто сделать это:

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

Но это, похоже, НЕДОРОГО, так как мне придется продолжать это делать.

Есть ли способ, которым я могу поместить некоторые смарты в FacebookApplication.Current, чтобы свойства AppId и AppSecret уже были установлены?

Открыть для любых предложений.

1 Ответ

1 голос
/ 31 марта 2011

Думаю, я понял: ctor для FacebookOAuthClient занимает IFacebookApplication.

Итак, я создал конкретную реализацию под названием WhiteLabeledFacebookApplication, которая реализует IFacebookApplication.

Ctor

WhiteLabeledFacebookApplication принимает перечисление WebsiteType, поэтому свойства AppId и AppSecret читают соответствующие значения из web.config на основе перечисления, переданного в ctor.

Итак, в моем FacebookController (где я делаю все, что касается FB), у меня есть частная собственность, которая называется CurrentFacebookApplication:

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

      return _currentFacebookApplication;
   }
}

Так что я могу сделать это:

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

И верный AppId / Secret будет возвращен - отличный!

Единственное, что я хотел бы сделать, это использовать внедрение зависимостей, но при создании контроллеров HttpContext нет, поэтому я не могу определить тип веб-сайта.

Тем не менее, работает хорошо - довольно СУХОЙ.

Снимаю шляпу перед разработчиками за инструментарий для использования интерфейсного программирования.

...