Venho refatorando um sistema existente para usar a injeção de dependência, e esse trabalho está ocorrendo sem problemas.
Depois de um tempo, notei que um grande número de bibliotecas internas se tornou dependente da estrutura de DI que eu usava. Como resultado, todo o projeto agora depende dessa estrutura de terceiros.
Vi uma ironia em separar todas as dependências, tornando-as dependentes de uma biblioteca compartilhada.
Minha primeira reação foi criar uma biblioteca de wrapper em torno da estrutura de dependência. Portanto, eu poderia substituir essa estrutura, se necessário. Depois de estimar o trabalho envolvido, percebi que a API resultante seria semelhante à estrutura existente e, portanto, tornaria a substituição mais difícil. Então eu abandonei a ideia.
Minha preocupação é que a estrutura de DI que estou usando se torne obsoleta ou precise ser substituída.
Existe um padrão de desenvolvimento ao trabalhar com o DI que reduz o acoplamento entre um projeto e a estrutura do DI?
DIFramework.Get<IService>()
não é realmente injeção de dependência; é um padrão relacionado chamado Service Locator. Muitas pessoas não gostam do Service Locator porque ele o une à estrutura e porque é muito facilmente abusado (como Singleton). Martin Fowler tem um artigo fantástico sobre estes padrões: martinfowler.com/articles/injection.html