【发布时间】:2013-04-29 15:14:06
【问题描述】:
在我尝试更新的旧代码中,他们实现了这样的依赖注入:
public class Program
{
private IProgramRepository programRepository;
public Program(IProgramRepository repository)
{
this.programRepository = repository;
}
public Program() : this(new EN_Program()) { }
现在这个程序类中的所有方法都是静态的,所以所有的静态方法实际上都有两个这样的方法:
public static List<Program> GetProgramsByUser(int userId)
{
return GetProgramsByUser(userId, GetDefaultRepository());
}
private static List<Program> GetProgramsByUser(int userId, IProgramRepository repo)
{
return repo.GetProgramsByUser(userId);
}
现在我已经阅读了有关实施 DI 的其他内容:
这根本不是依赖注入。这实际上明显违反 依赖倒置原则。原则说“高水平 模块不应该依赖于低级模块,两者都应该依赖 关于抽象。细节应该取决于抽象”。在上面 代码 Product.cs 本身创建 EN_Program 对象。所以直接 取决于 IProgramRepository 实现 (EN_Program)。如果将来 另一个实现来自 IProgramRepository 接口,然后是 Product.cs 代码本身需要更改。所以被探查是不是正确的方式 去做。
看起来老开发者想要实现 DI,只是从帮助类 (Program.cs) 开始,而没有向控制器注入任何内容。
我是否正确假设这段旧代码没有正确编写?在实现 DI 时是否有必要从控制器到后端的所有内容都进行注入?
例如。控制器需要注入帮助类使用的接口 (Program.cs) - 然后 Program.cs 注入存储库使用的接口
【问题讨论】:
标签: c# asp.net-mvc dependency-injection