Reflexión, set.GetValue(context, null) siempre devuelve null.
Estoy intentando obtener una propiedad de un objeto mediante reflexión.
public class CosmosDbSet<tentity> : DbSet<tentity> where TEntity : class, IEntity<string>
{
public string Name { get; }
//...
);
}
public class SKCosmosDbContext : CosmosDBContext
{
public CosmosDbSet<item> Items { get; }
public SKCosmosDbContext ()
{
Items = new CosmosDbSet<item>(
this,
"Items"
);
}
//...
}
public abstract class CosmosDBContext : DbContext
{
public async Task EnsureContainersExistAsync()
{
var sets = GetType().GetProperties()
.Where(pi => pi.PropertyType.IsGenericType
&& pi.PropertyType.GetGenericTypeDefinition().Equals(typeof(CosmosDbSet<>))
);
foreach (var set in sets)
{
var value = set.GetValue(this, null); // => el valor siempre es null
//...
}
}
}
public static class DbInitializer
{
public async static Task InitializeAsync(IServiceProvider services, ILogger logger)
{
var dbContext = services.GetRequiredService<skcosmosdbcontext>();
await dbContext.EnsureContainersExistAsync();
}
}
Como puedes ver, se ha encontrado la propiedad Items en SKCosmosDbContext, pero no puedo acceder a ella.
Cómo puedo acceder a la propiedad utilizando reflexión?
davy.ai
El problema es que el valor de la propiedad siempre es nulo cuando intento acceder a ella usando reflexión. Para solucionarlo, debes asegurarte de asignar un valor a la propiedad antes de intentar obtener su valor usando reflexión. En este caso, puedes asignar un valor a la propiedad Items en el constructor de SKCosmosDbContext. Una vez asignado el valor, podrás acceder a él usando reflexión.