2

我已经将我的ASP.NET MVC 3 Web应用程序启动并与Facebook C#SDK一起运行。Facebook C#SDK认证 - 如何在一个应用程序中处理多个“应用程序”?

依照指示操作,here,它好像一旦你把在指示web配置部分的AppId /秘密,那就是设置使用FacebookApplication.Current时,拉回如:

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

我的Web应用程序是“白色标签”,因此它提供两个网站,以及两个独立的Facebook应用程序。

此前,当我实施Facebook连接时,我有一个名为“FacebookApplicationId”的全局属性,它查看域并计算出要使用的应用ID。

有没有一个优雅的方式来做到这一点与Facebook C#SDK?

我可能只是这样做:

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

,但似乎未干,我将不得不继续这样做。

有没有办法我可以在FacebookApplication.Current中放一些智慧,这样AppIdAppSecret属性已经设置好了?

任何和所有的建议。

回答

1

认为我明白了:FacebookOAuthClient的ctor需要IFacebookApplication

所以我创建了一个名为WhiteLabeledFacebookApplication的具体实现,它实现了IFacebookApplication

WhiteLabeledFacebookApplication的构造函数需要一个WebsiteType枚举,所以对于AppIdAppSecret特性基础上,通过在构造函数通过枚举从web.config读取相关的值。

所以,在我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 /秘密将被撤回 - 常规!

我希望我能做的唯一事情就是使用依赖注入,但是在构建控制器的时候,没有HttpContext,所以我不能制定出网站类型。

仍然,工作得很好 - 相当干爽。

隐藏开发人员使用接口驱动编程工具包。

相关问题