【发布时间】:2011-04-08 05:34:02
【问题描述】:
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);
}
到这里为止,一切正常。
有人告诉我,这更像是服务定位器模式,违反了依赖注入模式,我想知道这里违反了什么。
【问题讨论】: