【问题标题】:Dependency Injection - Deciding arguments at runtime依赖注入 - 在运行时决定参数
【发布时间】:2012-02-14 02:32:45
【问题描述】:

我很想知道以下场景是否是依赖注入的好用例。这个例子有点编造,可能不是好的 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?

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

谢谢!

【问题讨论】:

标签: spring dependency-injection guice


【解决方案1】:

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

例如,您可以有一个 IUserFactory,BankAccount 类型使用它来获取 IUser。在运行时,可以使用具体的 UserFactory 类“注入” BankAccount 类,而不是具有编译时依赖项。然后,您可以替换掉 UserFactories 而不必需要 BankAccount 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多