public interface ITaskProvider
{
T GetTask<T>();
}
En la implementación de ITaskprovider a continuación, al ver que el IUserTask y IIdentityTask se está inyectando de propiedad en lugar del constructor. La razón es que Windsor instancia automáticamente las propiedades inyectadas en tiempo de ejecución cuando se accede, por lo que no tengo que poner todas las dependencias de must injected en el constructor.inyección de dependencias
public class TaskProvider : ITaskProvider
{
public IUserTasks UserTasks { get; set; }
public IIdentityTasks IdentityTasks { get; set; }
public T GetTask<T>()
{
Type type = typeof(T);
if (type == typeof(IUserTasks)) return (T)this.UserTasks;
if (type == typeof(IIdentityTasks)) return (T)this.IdentityTasks;
return default(T);
}
}
En el controlador, estoy inyectando el ITaskProvider en el constructor.
public ITaskProvider TaskProvider { get; set; }
public AuctionsController(ITaskProvider taskProvider)
{
TaskProvider = taskProvider;
}
Y aquí llamo al proveedor de tareas y sus métodos bien.
public ActionResult Index()
{
var userTasks = TaskProvider.GetTask<IUserTasks>();
var user = userTasks.FindbyId(guid);
}
Hasta aquí, todo funciona bien.
Me han dicho que esto es más como un patrón de localización de servicios y está violando el patrón de inyección de dependencia y quiero saber qué está violando aquí.
Gracias por estas cosas útiles. – Murat