依赖注入 - 在运行时确定参数

时间:2012-02-14 02:32:46

标签: spring dependency-injection guice

我很想知道以下场景是否是依赖注入的一个很好的用例。这个例子有点弥补,可能不是很好的OO设计。请关注我,并专注于与问题相关的部分:

假设我有以下课程:

class BankAccount
{
    User user;
    Integer accountNo;

    BankAccount(User user, Integer accountNo){
        ....
    }
 }

class User
{
    String firstName, lastName;

    User(String firstName, String lastName)
    {
        ....
    }
}

假设我必须在以下场景中创建对象:

void withoutDependecyInjectionUsingNewOperator()
{
     User user = new User("Lance", "Armstrong");
     // These values are determined
     // based on form input on UI
     BankAccount account = new BankAccount(user, 1233);
}

我已经了解了支持DI的Guice或Spring等框架。 如果我使用这些框架中的任何一个,我是否应该更改上述功能 使用DI?

基于我到目前为止在教程中看到的示例,它似乎最有用 当构造函数参数可以被确定为配置而不是用于其中的情况 这些值最终是基于用户输入吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

根据您发布的内容,这不是正确使用依赖注入。对于工厂模式来说,这是一个不错的案例。依赖注入用于通过使用接口消除对特定类型的依赖性,并且仅在运行时设置具体类型(通常使用第三方框架,如ninject)

例如,您可以使用BankAccount类型用于获取IUsers的IUserFactory。在运行时,BankAccount类可以“注入”具体的UserFactory类,而不是具有编译时依赖性。然后,您可以在不需要BankAccount类的情况下换出UserFactories。