Eu estive pensando um pouco sobre como a injeção de dependência poderia ser melhor integrada diretamente em uma linguagem do tipo C #. Encontrei uma solução em potencial sobre a qual gostaria de ouvir sua opinião. Eu não usei muitas estruturas de injeção de dependência, então pode haver algo que estou ignorando
De qualquer forma, a ideia é poder declarar propriedades como "injetáveis" usando uma palavra-chave. Quando um objeto é instanciado e essa propriedade não é inicializada por meio do construtor ou inicializador de objetos, ele solicita uma instância desse tipo de propriedade de algum serviço global.
Da mesma forma, você registra manipuladores para diferentes tipos nesse serviço, para poder instanciar o tipo de propriedade injetada.
A vantagem de usar esse tipo de arquitetura IMO é que ela é bastante flexível e fácil de usar. A desvantagem é que pode haver alguma sobrecarga de fazer a chamada para o singleton toda vez que você inicia uma classe que tem injeção.
Por outro lado, isso é apenas um problema para as classes instanciadas com freqüência em uma solução de alto desempenho, portanto não deve ser um problema. Talvez você possa usar algum tipo de fábrica nesses casos.
Pensamentos, questões, perguntas, melhores idéias?
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));