Разве вы не можете просто использовать класс для управления тем, который зарегистрирован через DI как одиночный?Тогда это будет фактически то же самое, что и ваши старые статические данные.
(я предполагаю, что это для связи между вашим сервером и другими серверами и напрямую не затрагивает ВАШИ клиенты API)
Если вам не нравится идея, что какой-то большой раздутый синглтон все время плавает, вы можете просто абстрагировать только хранилище токена, используя что-то вроде этого:
public interface ITokenStore
{
string GetCurrentToken();
void SetToken(string token);
}
public class TokenStore : ITokenStore
{
private DateTime _tokenRefreshedAt;
private string _currentToken;
public string GetCurrentToken()
{
//if we last got the token more than 23 hours ago,
//just reset token
if (lastTokenRefreshed.AddHours(23) < DateTime.Now)
{
_currentToken = null;
}
return _currentToken;
}
public void SetCurrentToken(string token)
{
_currentToken = token;
}
}
и затем зарегистрируйте это как одиночный код (не знакомый с Unity, поэтому настройте синтаксис в соответствии с требованиями):
container.RegisterSingleton<ITokenStore, TokenStore>();
тогда ваши службы, которым нужен токен, могут быть зарегистрированы для каждого запроса иликратковременные времена жизни, и просто делайте что-то вроде:
class SomeService
{
private ITokenStore _tokenStore;
public SomeService(ITokenStore tokenStore)
{
_tokenStore = tokenStore;
}
public string DoThings(params..)
{
var currentToken = _tokenStore.GetCurrentToken();
if (currentToken == null)
{
currentToken = GetNewTokenSomehow();
_tokenStore.SetCurrentToken(currentToken);
}
.... Do other things....
}
}
, вы можете заставить сам класс токенстара делать выборку нового токена, но если его время жизни одноэлементное, то любые сервисы, которые вы добавляете в него, должны будутбыть, так что я бы, вероятно, имел TokenManager на каждый срок действия запроса, который имеет дело со всем этим, но сам использует хранилище Token-одиночки или что-то в этом роде ...