Crear método genérico en tiempo de ejecución

¡Hola!
El otro día se dio el caso de que, utilizando la librería Akavache, necesitaba invocar un método genérico decidiendo el tipo en tiempo de ejecución. Me explico, el método que necesitaba ejecutar tenía la siguiente firma:

1
    static IObservable<T> GetObject<T>(this IBlobCache This, string key)

Realmente lo que vemos es un método de extensión al que le pasamos una key y nos devuelve el objeto correspondiente a esa key. Lo usaríamos de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
    class Person
    {
        public string Name { get; set; }
 
        public Person(string name)
        {
            this.Name = name;
        }
    }
    private static async Task DummyPerson()
    {
        var dummyPerson = await Akavache.BlobCache.LocalMachine.GetObject<Person>("dummy-key");
    }

Continúa leyendo Crear método genérico en tiempo de ejecución

Decompilando async/await

¡Hola!
Como bien dice el título de la entrada, vamos a echar un vistazo al código que se genera cuando utilizamos async/await. Siempre hemos escuchado que async/await es azúcar sintáctico y que genera un montón de código; pues voy a intentar explicar aprender qué es lo que hace el código que se genera cuando utilizamos async/await, a ver si me sale.
Continúa leyendo Decompilando async/await

Json.NET y el misterio de ImageFormat

¡Hola!
El otro día me ocurrió que, deserializando con Json.NET un objeto que contenía una propiedad ImageFormat, de forma cuasi mágica se serializaba/deserializaba correctamente. En concreto necesitaba hacer esto para una pequeña aplicación donde se generan iconos de diferentes tamaños y, cuando ya estaba pensando en hacer un JsonConverter, me di cuenta de que no era necesario.
Continúa leyendo Json.NET y el misterio de ImageFormat

Generar diferentes tamaños de imagen en Xamarin Forms

¡Hola!
Cuando tenemos que crear las imágenes para una aplicación Xamarin, nos encontramos con que tenemos varias resoluciones que generar. En la siguiente lista se muestran las resoluciones y un ejemplo de tamaño:
Android
LDPI: x0.75 (36×36)
MDPI: x1.0 (Tamaño base) (48×48)
HDPI: x1.5 (72×72)
XHDPI: x2.0 (96×96)
XXHDPI: x3.0 (144×144)
XXXHDPI: x4.0 (192×192)
iOS
Tamaño base: x1 (48×48)
@2: x2 (96×96)
@3: x3 (144×144)
Continúa leyendo Generar diferentes tamaños de imagen en Xamarin Forms

Ninject. Configurar contenedor desde XML

¡Hola!
Hoy vamos a ver cómo configurar nuestro contenedor IoC (con Ninject) a través de archivos XML. Esto puede ser útil en ciertas ocasiones, típicamente cuando queremos cambiar ciertas cosas sin tener que recompilar la aplicación.

Continúa leyendo Ninject. Configurar contenedor desde XML

Navigation properties null en Entity Framework

¡Hola!

Hoy me encontré un problema con EF en el que algunas propiedades de navegación se quedan null estando marcadas como virtual. El caso era algo así (lo vamos a simplificar):

public class MultilingualString : Entity
{
	public string DefaultText { get; set; }
 
        //ESTA ES LA PROPIEDAD QUE NOS INTERESA
        public virtual IList Translations { get; set; }
 
}

Continúa leyendo Navigation properties null en Entity Framework

Fody PropertyChanged. Haciendo más llevadero MVVM

¡Hola!
Cuando utilizamos por ejemplo WPF con MVVM, siempre es poco un tedioso añadir en los setters de las propiedades el famoso OnPropertyChanged en sus diferentes sabores. Podemos tener por ejemplo algo así: Continúa leyendo Fody PropertyChanged. Haciendo más llevadero MVVM

Mock a servicios Lazy

¡Hola!
Cuando queremos hacer mock a un servicio, pero éste es Lazy<IService>, se puede hacer fácilmente de la siguiente forma:

//Creamos el mock de la interfaz como habitualmente
Mock<IService> mockService = new Mock<IService>();
//Al constructor Lazy se le añade el mock que va a usar cuando éste inicialice
Lazy<IService> lazyService = new Lazy<IService>(() => mockService.Object);

Y con esto ya está listo.

¡Saludos!