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