¿Los métodos de extensión ocultan dependencias?

Todos,

Quería tener algunos pensamientos sobre esto. Últimamente me estoy convirtiendo cada vez más en un suscriptor de los principios "puristas" de DI / COI al diseñar / desarrollar. Parte de esto (una gran parte) implica asegurarse de que haya poca conexión entre mis clases y que sus dependencias se resuelvan a través del constructor (ciertamente hay otras formas de gestionar esto, pero entiendes la idea).

Mi premisa básica es que los métodos de extensión violan los principios de DI / IOC.

Creé el siguiente método de extensión que utilizo para asegurarme de que las cadenas insertadas en las tablas de la base de datos se trunquen al tamaño correcto:

public static class StringExtensions
{
    public static string TruncateToSize(this string input, int maxLength)
    {
        int lengthToUse = maxLength;
        if (input.Length < maxLength)
        {
            lengthToUse = input.Length;
        }

        return input.Substring(0, lengthToUse);
    }
}

Entonces puedo llamar a mi cadena desde otra clase así:

string myString = "myValue.TruncateThisPartPlease.";
myString.TruncateToSize(8);

Una traducción justa de esto sin usar un método de extensión sería:

string myString = "myValue.TruncateThisPartPlease.";
StaticStringUtil.TruncateToSize(myString, 8);

Cualquier clase que use cualquiera de los ejemplos anteriores no se pudo probar independientemente de la clase que contiene el método TruncateToSize (aparte de TypeMock). Si no estuviera usando un método de extensión y no quisiera crear una dependencia estática, se vería más como:

string myString = "myValue.TruncateThisPartPlease.";
_stringUtil.TruncateToSize(myString, 8);

En el último ejemplo, la dependencia _stringUtil se resolvería a través del constructor y la clase se podría probar sin depender de la clase del método TruncateToSize real (se podría burlar fácilmente).

Desde mi perspectiva, los dos primeros ejemplos se basan en dependencias estáticas (una explícita, otra oculta), mientras que la segunda invierte la dependencia y proporciona un acoplamiento reducido y una mejor capacidad de prueba.

Entonces, ¿el uso de los métodos de extensión entra en conflicto con los principios DI / COI? Si está suscrito a la metodología IOC, ¿evita utilizar métodos de extensión?

Respuestas a la pregunta(4)

Su respuesta a la pregunta