我一直听到人们在谈论依赖注入及其带来的好处,但是我并不真正了解它。
我想知道这是否是“我一直将数据库连接作为参数传递”的解决方案。
我尝试阅读有关Wikipedia的条目,但是该示例是用Java编写的,因此我不太了解它试图阐明的区别。(http://en.wikipedia.org/wiki/Dependency_injection)。
我读了这篇php-dependency-injection-in文章(http://www.potstuck.com/2009/01/08/php-
dependency-injection/
),看来目标是不将依赖项传递给html" target="_blank">对象直接,但要封锁对象的创建及其依赖项的创建。我不确定如何在使用php函数的上下文中应用它。
此外,是否存在以下依赖关系注入,是否应该在功能上下文中尝试进行依赖关系注入?
版本1 :(我每天创建但不喜欢的那种代码)
function get_data_from_database($database_connection){
$data = $database_connection->query('blah');
return $data;
}
版本2 :(不必通过数据库连接,但也许不必进行依赖注入?)
function get_database_connection(){
static $db_connection;
if($db_connection){
return $db_connection;
} else {
// create db_connection
...
}
}
function get_data_from_database(){
$conn = get_database_connection();
$data = $conn->query('blah');
return $data;
}
$data = get_data_from_database();
版本3 :(“对象” /数据的创建是分开的,并且数据库代码仍然是,所以也许这可以算作依赖注入?)
function factory_of_data_set(){
static $db_connection;
$data_set = null;
$db_connection = get_database_connection();
$data_set = $db_connection->query('blah');
return $data_set;
}
$data = factory_of_data_set();
任何人都有很好的资源或独到的见解可以使方法和收益清晰明了?
依赖注入是“我的构造函数中还有更多参数”的一个大词。
这是您在不喜欢Globals的可怕Singleton浪潮之前所做的事情:
<?php
class User {
private $_db;
function __construct($db) {
$this->_db = $db;
}
}
$db = new Db();
$user = new User($db);
现在,诀窍是使用单个类来管理您的依赖项,如下所示:
class DependencyContainer
{
private _instances = array();
private _params = array();
public function __construct($params)
{
$this->_params = $params;
}
public function getDb()
{
if (empty($this->_instances['db'])
|| !is_a($this->_instances['db'], 'PDO')
) {
$this->_instances['db'] = new PDO(
$this->_params['dsn'],
$this->_params['dbUser'],
$this->_params['dbPwd']
);
}
return $this->_instances['db'];
}
}
class User
{
private $_db;
public function __construct(DependencyContainer $di)
{
$this->_db = $di->getDb();
}
}
$dependencies = new DependencyContainer($someParams);
$user = new User($dependencies);
您必须认为自己只是另一类,而且更加复杂。但是,您的用户类可能需要一些信息来记录消息,例如许多其他类。只需将getMessageHandler函数添加到您的依赖项容器中,并将一些添加$this->_messages = $di->getMessageHandler()
到您的用户类中。其余代码没有任何变化。
我正试图在计算机上实现这个例子https://developer.android.com/jetpack/docs/guide.这就解释了Android应用程序的结构。 当我使用相同的代码时,我会出现以下错误。 我可以找出这个错误与 当我为ViewModel编写默认的零输入构造函数时,我得到了以下错误。 我想不出这个错误的原因和解决方法。
我有一个时间触发的Azure功能
问题内容: 在访问我的数据库时,我让用户填写了一个表单,并且在目标页面中,发布的值用于生成的MySQL查询中。 但是,由于某种原因,MySQL不喜欢我在命令中使用$ _POST变量,并且仅当我定义(例如)然后将$ user直接放在SQL命令中时,MySQL才起作用。 另一方面,我可以在不需要特定列名的INSERT语句中使用$ _POST值: 如果我尝试在INSERT语句中定义了属性(例如),则会出
问题内容: 为什么不应该使用函数的技术原因是什么?(例如,或)? 为什么我要使用其他东西,即使它们在我的网站上工作? 如果它们在我的网站上不起作用,为什么我会收到类似的错误 警告:mysql_connect():没有那个文件或目录 问题答案: MySQL 扩展: 未在积极开发中 被正式弃用的PHP 5.5(发布2013年6月)。 自 PHP 7.0起 已完全删除 (2015 年 12 月发布) 这
问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 为什么不应该使用功能的技术原因是什么?(例如,或)? 即使我的网站上可以工作,我为什么还要使用其他东西? 如果它们在我的网站上不起作用,为什么会出现类似 警告:mysql_connect():没有这样的文件或目录 问题答案: MySQL扩展: 没有积极发展 被 正式 弃用
本文向大家介绍webapi中如何使用依赖注入,包括了webapi中如何使用依赖注入的使用技巧和注意事项,需要的朋友参考一下 本篇将要和大家分享的是webapi中如何使用依赖注入,依赖注入这个东西在接口中常用,实际工作中也用的比较频繁,因此这里分享两种在api中依赖注入的方式Ninject和Unity;由于快过年这段时间打算了解下vue.js,所以后面对webapi的分享文章可能会慢点更新,希望支持