Я делаю инфраструктуру Pulumi C# как код (IaC).
Документы Pulumi используют Dictionary<string, object?>
, которые я хочу заменить анонимными объектами, потому что они выглядят лучше.
Проблема в том, что я получаю ошибку времени компиляции с анонимными объектами.
х это ImmutableArray<string>
.
var xpolicyDoc = Output
.All(tables.UserTradesTableArn)
.Apply(x =>
new Dictionary<string, object?>
{
{ "Version", "2012-10-17" },
{
"Statement", new[]
{
new Dictionary<string, object?>
{
{ "Effect", "Allow" },
{
"Action", new[]
{
"dynamodb:BatchWriteItem",
"dynamodb:PutItem",
"dynamodb:DeleteItem",
"dynamodb:UpdateItem",
"dynamodb:DescribeTable",
"dynamodb:Query"
}
},
{
"Resource", new[] { x[0] }
}
},
new Dictionary<string, object?>
{
{ "Effect", "Allow" },
{ "Action", "dynamodb:ListTables" },
{ "Resource", "*" }
}
}
}
});
var policy = new Policy($"{tableName}-table-policy", new PolicyArgs
{
PolicyDocument = policyDoc.Apply(x => JsonSerializer.Serialize(x))
});
x[0]: инициализатор проекции анонимного типа должен быть простым именем или выражением доступа к члену.
var policyDoc = Output
.All(tables.UserTradesTableArn)
.Apply(x =>
new
{
Version = "2012-10-17",
Statement = new[]
{
new
{
Effect = "Allow",
Action = new[]
{
"dynamodb:BatchWriteItem",
"dynamodb:PutItem",
"dynamodb:DeleteItem",
"dynamodb:UpdateItem",
"dynamodb:DescribeTable",
"dynamodb:Query"
},
Resource = new { x[0] }
},
new
{
Effect = "Allow",
Action = "dynamodb:ListTables",
Resource = "*"
}
}
});
var policy = new Policy($"{tableName}-table-policy", new PolicyArgs
{
PolicyDocument = policyDoc.Apply(x => JsonSerializer.Serialize(x))
});
Это должно быть либо
Resource = new [] { x[0] }
Или
Resource = x[0]
Или
Resource = new { SomeProperty = x[0] }
В том, что у вас есть, отсутствует имя свойства.