正式正确的方式更新公众“;常数“;在C#中

本文关键字:常数 方式 更新 | 更新日期: 2023-09-27 18:29:04

我的C#项目中有一个常量类。我使用的是一个Constants类,它包含用于配置OAuth登录调用的值。无论有人点击"使用谷歌登录"还是"使用Facebook登录"等,都定义了这些公共常数的值。

我是一个自学成才的程序员,所以可以看出我可能会在这里做一些可能会引起问题的事情。那么你该怎么处理呢。

这是我目前所拥有的,但我希望只有APP_ID,它的值取决于按下了哪个登录按钮。

我可以将这些设置为子程序,但我不确定这是否是最佳实践?

public class Constants
{
    public const string FB_APP_ID = "xxxxxx";
    public const string FB_SCOPE = "";
    public const string FB_APP_NAME = "xxxx";
    public const string AUTH_URI = "https://m.facebook.com/dialog/oauth/";
    public const string RETURN_URI = "https://www.facebook.com/connect/login_success.html";
    public const string G_APP_ID = "yyyyyyy.apps.googleusercontent.com";
    public const string S_SCOPE = "https://www.googleapis.com/auth/userinfo.email";
}

更新:

只是要注意关于我的设置的几点。我正在使用Xamarin进行跨平台移动开发,这不是很重要。然而,这确实意味着我的解决方案有3个项目,一个可移植类库,一个iOS项目和一个Android项目。因此,我在PCL的视图页面上描述了一些按钮,后面有一些Button.Clicked处理程序。这就是我想要设置全局OAuth详细信息类的值的地方。然后,我必须从我的iOS和Android项目中引用这个OAuth实例,无论它是谷歌、脸书还是其他一组值。

正式正确的方式更新公众“;常数“;在C#中

您必须创建类,至少要保存数据,甚至可能为特定的提供程序做一些自定义工作。

类似这样的东西:

public class OAuthInfo
{
    public string AppId {get;set;}
    public string Scope {get;set;}
    public string AppName  {get;set;}
    public string AuthUri {get;set;}
    public string ReturnUri  {get;set;}
}

并实例化一个实例:

var facebookData = new OAuthInfo()
                   {
                       AppId = "xxxxxx",
                       Scope = "",
                       AppName  = "xxxx",
                       AuthUri = "https://m.facebook.com/dialog/oauth/",
                       ReturnUri  = "https://www.facebook.com/connect/login_success.html"
                   };

你可以把它传给你需要的地方。

下面是我对配置的评论。。。

在典型的Windows/Web.NET应用程序中,您可以使用带有自定义配置部分的ConfigurationManager类来为您完成OAuth提供程序配置工作的繁重工作。

这些课程显然在Xamarin中"缺失"了,在Xamarn论坛上的这个帖子中有一个关于最佳实践的扩展讨论。

该线程可以概括为:

  • 如果您更改了环境配置,请将具有静态属性的静态类与#if编译器指令一起用于不同的环境部署
  • 滚动您自己的XML配置文件,您可以使用标准的.NET XML处理(如Linq-to-XML)轻松地对其进行读写

IMHO对于Singleton实现的读取器类,XML配置文件是我的首选,很像ConfigurationManager。为什么?因为XML配置文件是.NET中已建立的模式,任何阅读您的代码的人都会理解您是如何/为什么以这种方式处理类的。。。

如果您将Singleton放在一个通用的可访问程序集中,并确保它在构造时加载配置,那么它应该在多个位置可用,而无需担心在应用程序的生命周期内重复代码或在第一次构造后重新实例化,如果您需要它,只需向该程序集添加一个依赖项并使用实例。

创建一个app.config文件来保存这些所谓的常量。配置填充将随应用程序一起进行,并在运行时读取。这样,如果需要,用户(?)可以在不重新编译程序的情况下更改配置。

参见

  • 如何:将应用程序配置文件添加到C#项目
  • 管理应用程序设置(.NET)

然后,您可以在app.config文件中添加一个appSettings节点来保存所有应用程序值,这里有一个:

 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
    <appSettings>
       <add key="TargetURL" value="https://Omegacoder.Com" />
    </appSettings>
 </configuration/>

并按如下方式提取(如果使用Visual Studio 2015中的C#6,则通过调用ConfigurationManager并以这种方式分配来设置代码中的属性):

 public static string TargetUrl { get; set; } = 
                               ConfigurationManager.AppSettings["TargetURL"];

注意,我将常量放入静态中,但可以在程序中的任何时候简单地调用ConfigurationManger,而不必像我的示例中所示的那样分配值。


更新

目前,Xamarin项目不支持应用程序配置文件。