骰子依赖注入的全球共享替代

白壁虎

我试图熟悉Dice依赖注入,但是第一次尝试却失败了。

我想告诉Dice,每个依赖的类MyInterface都应获取的一个实例,MyInterfaceImpl因此我使用进行了评估MyClass

显然,我在Dice中缺少一些规则的细节。

这是我的示例代码:

<?php
namespace Example;

require("vendor/autoload.php");

interface MyInterface {}

class MyInterfaceImpl implements MyInterface {}

class MyClass {
    public function __construct(MyInterface $i) {}
}

class MyOtherClass {
    public function __construct(MyInterface $i) {}
}

$dice = new \Dice\Dice();

$rule = new \Dice\Rule();
$rule->shared = true;
$rule->substitutions['Example\\MyInterface'] = new \Dice\Instance('Example\\MyInterfaceImpl');
$dice->addRule('Example\\MyClass', $rule);

$instance = $dice->create("Example\\MyClass");
$instance = $dice->create("Example\\MyOtherClass");

运行此代码的输出为:

PHP Fatal error:  Cannot instantiate interface Example\MyInterface in …/vendor/tombzombie/dice/Dice.php on line 38
PHP Stack trace:
PHP   1. {main}() …/dicetest.php:0
PHP   2. Dice\Dice->create() …/dicetest.php:26
PHP   3. Dice\Dice->Dice\{closure}() …/vendor/tombzombie/dice/Dice.php:43
PHP   4. Dice\Dice->Dice\{closure}() …/vendor/tombzombie/dice/Dice.php:38
PHP   5. Dice\Dice->create() …/vendor/tombzombie/dice/Dice.php:70
PHP   6. Dice\Dice->Dice\{closure}() …/vendor/tombzombie/dice/Dice.php:43

如果要运行代码,则需要使用来配置composer "require": {"tombzombie/dice": "dev-master"}

规则必须获取我要实例化的类的名称,如示例代码所示

但是,除非我也为添加了相同的规则MyOtherClass否则仍然不能在全球范围内使用此替换,但是这不会像我期望的那样全球范围内使用

白壁虎

Dice提供了一个默认规则,用于定义例如在实例化任何类时使用的替换。用星号表示*

<?php
namespace Example;

require("vendor/autoload.php");

interface MyInterface {}

class MyInterfaceImpl implements MyInterface {}

class MyClass {
    public function __construct(MyInterface $i) {}
}

class MyOtherClass {
    public function __construct(MyInterface $i) {}
}

$dice = new \Dice\Dice();

$rule = new \Dice\Rule();
$rule->shared = true;
$rule->substitutions['Example\\MyInterface'] = new \Dice\Instance('Example\\MyInterfaceImpl');
$dice->addRule('*', $rule);

$instance = $dice->create("Example\\MyClass");
$instance = $dice->create("Example\\MyOtherClass");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

替代全球

来自分类Dev

实体框架,依赖注入和共享对象

来自分类Dev

Lua全球替代

来自分类Dev

具有共享首选项的Flutter依赖注入

来自分类Dev

Guice辅助注入过度使用的替代方案,依赖注入与非DI构造函数

来自分类Dev

依赖注入,注入参数

来自分类Dev

全球化宝石的替代品

来自分类Dev

一包中的azure函数之间是否共享依赖项注入容器?

来自分类Dev

共享数据上下文/注入依赖项Entity Framework 6代码优先

来自分类Dev

依赖注入-注入容器还是个人依赖?

来自分类Dev

在ASP.NET Core中使用Microsoft.Extensions.DependencyInjection时注入IUnityContainer依赖关系的替代方法?

来自分类Dev

依赖注入和范围?

来自分类Dev

属性中的依赖注入

来自分类Dev

依赖注入与并行处理

来自分类Dev

依赖注入与泛型

来自分类Dev

Laravel依赖注入的观点

来自分类Dev

Dagger 2的依赖注入

来自分类Dev

扩展类的依赖注入?

来自分类Dev

Django中的依赖注入

来自分类Dev

反应依赖注入或类似?

来自分类Dev

Android NDK的依赖注入?

来自分类Dev

依赖注入IApplicationEnvironment错误

来自分类Dev

HTML导入的依赖注入

来自分类Dev

JavaScript依赖注入

来自分类Dev

多态和依赖注入

来自分类Dev

默认依赖注入?

来自分类Dev

Laravel中的依赖注入

来自分类Dev

依赖注入和IDisposable

来自分类Dev

Laravel依赖注入与继承