public abstract class BaseControler : Controller
{
public IUnitOfWork UnitOfWork { get; set; }
}
public class HomeController : BaseControler
{
readonly IUserRepository _userRepository;
// :-)
public HomeController(IUserRepository userRepository)
{
_userRepository = userRepository;
}
}
Todos sabemos que tenemos que utilizar Constructor inyección cuando la dependencia es requería. Si se trata de una dependencia opcional, podemos usar Inyección de propiedad en su lugar.
Pero, ¿qué debe hacer cuando solo su clase base requiere la dependencia?
Cuando utilizaría Constructor Injection, en mi opinión, contaminaría todas las clases derivadas.
public abstract class BaseControler : Controller
{
readonly IUnitOfWork _unitOfWork;
public BaseControler(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
}
public class HomeController : BaseControler
{
readonly IUserRepository _userRepository;
// :-(
public HomeController(IUserRepository userRepository,
IUnitOfWork unitOfWork) : base(unitOfWork)
{
_userRepository = userRepository;
}
}
¿Es approperiate utilizar inyección Propiedad en una clase base cuando una dependencia sólo se requiere en la clase base?
Veo su punto, pero el problema que obtendré son muchos parámetros de constructor. El punto es que las clases derivadas no están hablando directamente a la dependencia, en lugar de la clase base. Entonces, distinguiría entre llamadas directas a una dependencia y llamadas indirectas a una dependencia. – Rookian
@Rookian, si te encuentras en una situación en la que tienes varios parámetros de constructor, podrías considerar crear un servicio que agregue esas dependencias y luego inyectar solo el servicio en el constructor. –
+1 Favor de la composición sobre la herencia. Si se convierte en un problema con demasiados parámetros de constructor, culpe a su estrategia de herencia, no a la inyección de constructor. –