Yii依赖注入基本

时间:2015-02-22 11:23:46

标签: yii dependency-injection dependencies

有人可以解释我DI基础吗?我明白它是什么,但我现在还不知道如何在实践中使用DI容器。例如,我在同一个控制器中有2个函数:

public function actionIndex()
{
    $productsModel = new Products();
    $productsFormModel = new ProductsForm();
    $informationFormModel = new InformationForm();

    ....
}

public function actionInformation()
{
    $productsModel = new Products();
    $productsFormModel = new ProductsForm();
    $informationFormModel = new InformationForm();

    ....
}

所以我的两个问题是:

  1. 如上所述,我在这些功能中使用相同的模型。最好将它们初始化为" public function init(){}"然后在全球所有类中使用它们或者这是个坏主意?

  2. 我认为如果将这些模型注入此控制器应该会更好,对吗?如何正确地做到这一点?

  3. 我创建了文件DI.php,我将其包含在条目脚本中。文件内容为:

    <?php
    
    \Yii::$container->set('products_model', 'app\models\Products');
    \Yii::$container->set('products_form', 'app\models\ProductsForm');
    \Yii::$container->set('information_form', 'app\models\InformationForm');
    
    ?>
    

    然后,我能够全局获取类app \ models \ Products实例(在每个控制器,视图或模型中):

    $instance_products = \Yii::$container->get('products_model');
    $instance_products_form = \Yii::$container->get('products_form');
    $instance_information_form = \Yii::$container->get('information_form');
    

    但这是个坏主意,对吧?

    请回答我的两个问题。 :)

    谢谢!

1 个答案:

答案 0 :(得分:0)

  1. 保持事物DRY始终是个好主意。这些类似乎非常相关,所以我建议通过创建一个新模型(例如ProductsInfo)来明确这种关系。可以相应地命名控制器(ProductsInfoController),从而澄清应用程序结构。

  2. 谨慎使用依赖注入。如果有不同的方式,请改用它。 DI并不适合所描述的用例。