es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for 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.

Comments are closed.