He estado pensando un poco en cómo la inyección de dependencia podría integrarse mejor directamente en un lenguaje similar a C #. Se me ocurrió una posible solución sobre la que me gustaría conocer su opinión. No he usado muchos marcos de inyección de dependencia, por lo que podría haber algo que estoy pasando por alto
De todos modos, la idea es poder declarar propiedades como "inyectables" usando una palabra clave. Cuando se crea una instancia de un objeto y esa propiedad no se inicializa a través del constructor o el inicializador de objeto, solicita una instancia de ese tipo de propiedad de algún servicio global.
De manera similar, registra controladores para diferentes tipos en ese servicio para que pueda instanciar el tipo de propiedad inyectado.
La ventaja de usar este tipo de arquitectura IMO es que es bastante flexible y fácil de usar. La desventaja es que puede haber algo de sobrecarga de hacer la llamada al singleton cada vez que inicia una clase que tiene inyección.
Por otra parte, eso solo es un problema para las clases que se instancian con frecuencia en una solución de alto rendimiento, por lo que no debería ser un gran problema. Tal vez podría usar algún tipo de fábrica en esos casos.
Pensamiento, problemas, preguntas, mejores ideas?
Código
public class SomeClass
{
public SomeClass()
{
//implicit behavior if Animal is not set in constructor or initializer
this.Animal = GlobalInjector.Get(this,typeof(Mammal))
}
public injectable Mammal Animal
{
get;
set;
}
}
GlobalInjector.Register(typeof(Mammal), () => return new Mammal(someParameter));