public interface ITaskProvider
{
T GetTask<T>();
}
在下面ITaskprovider的實施,正如你看到的IUserTask和 IIdentityTask正在從屬性,而不是構造注入。 原因是Windsor在運行時自動實例化注入屬性 ,因此我不必將所有必須注入的依賴項 都放入構造函數中。依賴注入
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);
}
}
在控制器中,我在構造函數中注入ITaskProvider。
public ITaskProvider TaskProvider { get; set; }
public AuctionsController(ITaskProvider taskProvider)
{
TaskProvider = taskProvider;
}
在這裏我稱之爲taskprovider及其方法很好。
public ActionResult Index()
{
var userTasks = TaskProvider.GetTask<IUserTasks>();
var user = userTasks.FindbyId(guid);
}
到目前爲止,一切工作正常。
我被告知,這更像是一個服務定位模式,違反了依賴注入模式,我想知道這裏違反了什麼。
感謝這個有用的東西。 – Murat 2010-09-04 17:03:35