c# - 循环属性 c#
问题描述
static TestInitialization()
{
client = new HttpClient();
client.BaseAddress = new Uri( URL_BASE_ADRESS );
client.DefaultRequestHeaders.Add( "auth-key", Auth_Token );
}
private const String path = @"f:\specialproject\authdata.txt";
internal static readonly String Login = File.ReadLines( path ).First(); //login in this file must be the first line
internal static readonly String Password = File.ReadLines( path ).Last();//password - as second line
internal static String Auth_Token
{
get
{
if( Auth_Token != null )
return Auth_Token;
else
return LoginAndGetToken();
}
set
{
Auth_Token = LoginAndGetToken();
}
}
internal static String LoginAndGetToken()
{
HttpRequestMessage request = new HttpRequestMessage( HttpMethod.Post, $"{URL_BASE_ADRESS}/console/home/login" );
request.Content = new StringContent( "{\"login\":\"" + TestInitialization.Login + "\",\"password\":\"" + TestInitialization.Password + "\"}", Encoding.UTF8, "application/json" );
Auth_Token = client.SendAsync( request ).GetAwaiter().GetResult().Headers.GetValues( "auth-key" ).ToArray()[ 0 ];
return Auth_Token;
}
这是我的代码的一部分。当执行静态构造函数并且我尝试获取Auth-Key
属性时 - 在 getter 中,它在检查 null 时被循环。
我该如何实现这个逻辑?(不添加额外的私有字段)如果值为空,set
则执行该块。或者LoginAndGetToken()
有返回值的方法。
解决方案
这
internal static String Auth_Token
{
get
{
if( Auth_Token != null )
return Auth_Token;
else
return LoginAndGetToken();
}
set
{
Auth_Token = LoginAndGetToken();
}
}
有两个堆栈溢出情况。第一个在get
( return Auth_Token
) 中,另一个在set
(LoginAndGetToken
方法设置Auth_Token
值)
我想建议Lazy<T>
与工厂一起使用
internal static Lazy<String> Auth_Token = new Lazy<String>(LoginAndGetToken);
internal static String LoginAndGetToken()
{
HttpRequestMessage request = new HttpRequestMessage( HttpMethod.Post, $"{URL_BASE_ADRESS}/console/home/login" );
request.Content = new StringContent( "{\"login\":\"" + TestInitialization.Login + "\",\"password\":\"" + TestInitialization.Password + "\"}", Encoding.UTF8, "application/json" );
return client.SendAsync( request ).GetAwaiter().GetResult().Headers.GetValues( "auth-key" ).ToArray()[ 0 ];
}
这可以用于如下Auth_Token.Value
调用:
client.DefaultRequestHeaders.Add( "auth-key", Auth_Token.Value );
PS没有额外的字段条件看起来很奇怪(并且Auth_Token
不是字段它是属性)
PPS是家庭作业吗?有方法数量限制吗?您可以拥有一个Auth_Token
属性来存储一个字符串值,以及在没有值GetAuth_Token()
时返回Auth_Token
或调用的方法LoginAndGetToken
Auth_Token
string GetAuth_Token()
{
return Auth_Token = Auth_Token ?? LoginAndGetToken();
}
推荐阅读
- solr - Solr Facet Pivot 日期字段间隙
- node.js - Live Heroku 应用程序除了背景图像(React/Node.js)之外的所有图像都损坏了
- visual-studio - 未能创建组件“BindingNavigator”
- c - 递归:从袋子中挑选 8 个球。问题:如何避免相同的答案?
- c - 如果在分叉时复制了指针的地址,那么指针指向的值如何对每个子进程都是唯一的?
- intellij-idea - IntelliJ“问题”视图仅显示很少的错误
- python - 没有引用和赋值的递归
- javascript - 在 Qualtrics 循环和合并中存储音频重播计数
- reactjs - Zlib.Gunzip 在 Grafana 插件中不起作用
- c++ - 库存系统中的对象切片