bjyoungblood/heroine

该包最新版本(dev-master)没有可用的许可证信息。

dev-master 2016-07-25 19:58 UTC

This package is not auto-updated.

Last update: 2024-09-12 17:58:14 UTC


README

Travis-CI Build Status

Heroine 通过提供简单的、无依赖的服务定位器和存储库,来拯救您从依赖注入(DI)的恶梦中醒来。

有关服务定位器模式的更多信息,您可以阅读维基百科文章服务定位器模式,或者访问Martin Fowler的网站

配置和使用

您可以根据自己的需要配置 Heroine 的方式和位置。您只需使用数组或 Heroine\Config 实例构建一个新的 Heroine\Heroine 对象。

以下是一个示例数组配置:

<?php

$heroineConfig = array(
	'instantiables' => array(
		'MyClass'       => 'MyClass',
		'another_class' => 'Another\Class',
	),
	'callables' => array(
		'MyCalledClass' => function(Heroine\Heroine $heroine) {
			$instance = new MyCalledClass;
			$instance->setMyClass($heroine->get('MyClass'));
			return $instance;
		},
		'another_called_class' => function(Heroine\Heroine $heroine) {
			$instance = new Another\Called\Class;
			$instance->setAnotherClass($heroine->get('another_class'));
			return $instance;
		},
	),
	'factories' => array(
		'MyFactoryProductClass' => 'MyFactoryClass',
	),
	'initializers' => array(
		function (Heroine\Heroine $heroine, $instance) {
			if ($instance instanceof Heroine\HeroineAwareInterface)
			{
				$instance->setHeroine($heroine);
			}
		},
		function (Heroine\Heroine $heroine, $instance) {
			if ($instance instanceof InitializableInterface)
			{
				$instance->initalize();
			}
		},
	),
);

?>

这里的前四个顶级数组键代表了 Heroine 提供的四种创建模式。

  • 可实例化对象 - 这些是没有其他依赖但您希望由 Heroine 处理的类。这可能是一个模型实体原型的一个例子。
  • 可调用对象 - 这些是简单的工厂,可以使用 Heroine(或其他资源)来创建类的实例。当您的类有几个简单的依赖关系,而这些依赖关系已经由 Heroine 管理时,这被推荐使用。
  • 工厂 - 这是一个完整的工厂类,必须实现 Heroine\Factory\FactoryInterface。将调用 createService 方法来获取实例。这被推荐用于具有许多依赖关系或复杂配置的对象。
  • 初始化器 - 初始化器是一系列在 Heroine 创建的每个对象上运行的函数,用于提供一些初始状态。例如,您可能有一个 HeroineAwareInterface,它提供了一个钩子,在对象创建后将其注入到对象中。