Не инициализируются объекты в GRPC сервисе
Попалось задание, создать GRPC сервис. Функционал написал. При запуске методов, не инициализируются объекты. Возможно, не совсем грамотно сформулировал проблему, но при просмотре кода все станет понятно.
Вызов метода на клиенте
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Billing.BillingClient(channel);
client.CoinsEmission(new EmissionAmount { Amount = 105 }); //amount - количество монет
Метод сервиса
public override Task<Response> CoinsEmission(EmissionAmount request, ServerCallContext context)
{
// инициализирую список с монетами
int id = 0;
for (int i = 0; i < coins.Length; i++)
{
coins[i] = new Coin { Id = id++, History = "История" };
}
Stack<Coin> StackCoins = new Stack<Coin>(coins);
string comment = "";
//прохожу по пользователям и раздаю им монеты, считая их пропорционально рейтингу
foreach (UserProfile user in users)
{
int coinsOnPerson = GetAmountOfCoins(request.Amount, user.Rating, users);
for (int i = 0; i < coinsOnPerson; i++)
{
var coin = StackCoins.Pop();
coin.History += $"\n Передалась новому владельцу {user.Name} /";
user.Coins.Add(coin);
}
comment += $"{user.Name} получил {coinsOnPerson} монет";
}
return Task.FromResult(new Response { Status = Response.Types.Status.Ok, Comment = comment });
}
Сам сервис
public class BillingService : Billing.BillingBase
{
public Coin[] coins = new Coin[105];
public List<UserProfile> users = new List<UserProfile>()
{
new UserProfile
{
Name = "boris",
Rating = 5000,
},
new UserProfile
{
Name = "maria",
Rating = 1000,
},
new UserProfile
{
Name = "oleg",
Rating = 800,
}
};
public override async Task ListUser(None request, IServerStreamWriter<UserProfile> responseStream, ServerCallContext context)
{
foreach (UserProfile user in users)
{
await responseStream.WriteAsync(user);
}
}
public override Task<Response> CoinsEmission(EmissionAmount request, ServerCallContext context)
{
int id = 0;
for (int i = 0; i < coins.Length; i++)
{
coins[i] = new Coin { Id = id++, History = "История" };
}
Stack<Coin> StackCoins = new Stack<Coin>(coins);
string comment = "";
foreach (UserProfile user in users)
{
int coinsOnPerson = GetAmountOfCoins(request.Amount, user.Rating, users);
for (int i = 0; i < coinsOnPerson; i++)
{
var coin = StackCoins.Pop();
coin.History += $"\n Передалась новому владельцу {user.Name} /";
user.Coins.Add(coin);
}
comment += $"{user.Name} получил {coinsOnPerson} монет";
}
return Task.FromResult(new Response { Status = Response.Types.Status.Ok, Comment = comment });
}
Вывод в консоли. Количество монет не меняется

Ответы (1 шт):
Автор решения: dasper
→ Ссылка
Решил проблему сделав хранилище статичным. Видимо .при каждом запросе создавались новые объекты.