public interface ITaskProvider
{
T GetTask<T>();
}
Bei der Implementierung von ITaskprovider unten, wie Sie die IUserTask und IIdentityTask sehen anstelle von Konstruktor von Immobilien injizieren. Der Grund ist, dass Windsor automatisch die injizierten Eigenschaften zur Laufzeit instanziiert, wenn auf sie zugegriffen wird, so dass ich nicht alle Abhängigkeiten des Müssen injizierten im Konstruktor setzen muss.Dependency Injection
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);
}
}
In der Steuerung injiziere ich den ITaskProvider im Konstruktor.
public ITaskProvider TaskProvider { get; set; }
public AuctionsController(ITaskProvider taskProvider)
{
TaskProvider = taskProvider;
}
Und hier rufe ich den Taskprovider und seine Methoden in Ordnung.
public ActionResult Index()
{
var userTasks = TaskProvider.GetTask<IUserTasks>();
var user = userTasks.FindbyId(guid);
}
Bis hierher, funktioniert alles einwandfrei.
Mir wurde gesagt, dass dies mehr wie ein Service-Locator-Muster ist und verletzt Abhängigkeit Injektion Muster und ich möchte wissen, was hier verletzt.
Danke für dieses nützliche Zeug. – Murat