Estoy escribiendo una biblioteca que proporcionará una colección de tipos públicos a sus consumidores.Valores predeterminados para argumentos de constructor en un proyecto de biblioteca
Quiero que los tipos de esta biblioteca sean compatibles con la inyección. Esto significa que cada clase necesita tener un constructor a través del cual es posible especificar cada dependencia del objeto que se inicializa. También quiero que la biblioteca se adhiera a la convención sobre el principio de configuración. Esto significa que si un consumidor desea el comportamiento predeterminado, puede usar un constructor sin parámetros y el objeto de alguna manera construirá las dependencias por sí mismo.
En el ejemplo (C#):
public class Samurai {
private readonly IWeapon _weapon;
// consumers will use this constructor most of the time
public Samurai() {
_weapon = ??? // get an instance of the default weapon somehow
}
// consumers will use this constructor if they want to explicitly
// configure dependencies for this instance
public Samurai(IWeapon weapon) {
_weapon = weapon;
}
}
Mi primera solución sería utilizar el patrón de servicio de localización.
El código se vería así:
...
public Samurai() {
_weapon = ServiceLocator.Instance.Get<IWeapon>();
}
...
Tengo un problema con esto, sin embargo. El localizador de servicios ha sido marcado como un antipatrón (link) y estoy completamente de acuerdo con estos argumentos. Por otro lado, Martin Fowler aboga por el uso del patrón de localizador de servicios exactamente en esta situación (proyectos de biblioteca) (link). Quiero ser cuidadoso y eliminar la posible necesidad de reescribir la biblioteca después de que se muestre que el localizador de servicios realmente fue una mala idea.
Por lo tanto, en conclusión, ¿cree que el localizador de servicios está bien en este escenario? ¿Debo resolver mi problema de una manera completamente diferente? Cualquier idea es bienvenida ...
Es importante mantener una clase ID amigable. +1 –