如何在重构依赖注入时知道要查找什么

时间:2016-06-02 22:20:59

标签: c# dependency-injection inversion-of-control

今天刚刚阅读了几篇关于DI的文章,我的任务是重构一个使用AutoFac的项目:)太棒了!

因此,例如,这里是我的代码中的一个类的快照:

public class LoginManager : ManagerBase
{
// stuff 

    public LoginModel LoadLoginPageData()
        {
            LoginModel model = new LoginModel();
 model.blahblah = "whateverrr"
}
}

那怎么办呢?从我的学习中我看到一个new LoginModel()语句,所以我将为它创建一个接口,将它作为参数传递给这个类的构造函数?

1 个答案:

答案 0 :(得分:0)

显然,重构实际上取决于您当前的应用目标。在这种情况下,您的方法确实依赖于LoginModel,因为您的方法需要Login模型的实例才能运行。 (这是定义你的依赖的原因)

你可以通过创建一个接口或抽象类来抽象出你的模型,然后将它注入到LoginManger的构造函数中,但这或多或少与松散耦合一致。

这是一个重要的区别。您不需要松耦合来实现依赖注入。依赖注入应该解决在运行时或编译时交换对象依赖性的问题。因此松耦合会有所帮助。

在您的具体示例中,您不需要将LoginModel注入到类的构造函数中,以免您计划在整个类中使用相同的模型实例。如果您仍在尝试依赖注入,只要LoginManger的其余部分不需要知道该LoginModel实例,您就可以避免使用方法注入。同样,您可以注入特定的LoginModel实例,而无需创建模型的抽象版本 - 除非您计划使用类似但不同的LoginModel交换它。