搜索
首页PHP 库Other libraries依赖注入容器的PHP库
依赖注入容器的PHP库
<?php
namespace Auryn;
class CachingReflector implements Reflector
{
    const CACHE_KEY_CLASSES = 'auryn.refls.classes.';
    const CACHE_KEY_CTORS = 'auryn.refls.ctors.';
    const CACHE_KEY_CTOR_PARAMS = 'auryn.refls.ctor-params.';
    const CACHE_KEY_FUNCS = 'auryn.refls.funcs.';
    const CACHE_KEY_METHODS = 'auryn.refls.methods.';
    private $reflector;
    private $cache;
    public function __construct(Reflector $reflector = null, ReflectionCache $cache = null)
    {
        $this->reflector = $reflector ?: new StandardReflector;
        $this->cache = $cache ?: new ReflectionCacheArray;
    }
    public function getClass($class)
    {
        $cacheKey = self::CACHE_KEY_CLASSES . strtolower($class);
        if (!$reflectionClass = $this->cache->fetch($cacheKey)) {
            $reflectionClass = new \ReflectionClass($class);
            $this->cache->store($cacheKey, $reflectionClass);
        }
        return $reflectionClass;
    }

我们的思路是应用程序用到一个Foo类,就会创建Foo类并调用Foo类的方法,假如这个方法内需要一个Bar类,就会创建Bar类并调用Bar类的方法,而这个方法内需要一个Bim类,就会创建Bim类,接着做些其它工作。使用依赖注入的思路是应用程序用到Foo类,Foo类需要Bar类,Bar类需要Bim类,那么先创建Bim类,再创建Bar类并把Bim注入,再创建Foo类,并把Bar类注入,再调用Foo方法,Foo调用Bar方法,接着做些其它工作。这就是控制反转模式。依赖关系的控制反转到调用链的起点。这样你可以完全控制依赖关系,通过调整不同的注入对象,来控制程序的行为。例如Foo类用到了memcache,可以在不修改Foo类代码的情况下,改用redis。

使用依赖注入容器后的思路是应用程序需要到Foo类,就从容器内取得Foo类,容器创建Bim类,再创建Bar类并把Bim注入,再创建Foo类,并把Bar注入,应用程序调用Foo方法,Foo调用Bar方法,接着做些其它工作.总之容器负责实例化,注入依赖,处理依赖关系等工作。


免责声明

本站所有资源均由网友贡献或各大下载网站转载。请自行检查软件的完整性!本站所有资源仅供学习参考。请不要将它们用于商业目的。否则,一切后果由您负责!如有侵权,请联系我们删除。联系方式:admin@php.cn

相关文章

依赖注入:为什么不只是注入容器?依赖注入:为什么不只是注入容器?

28Jan2025

避免依赖性注入中的构造函数疯狂,可能会遇到类似于以下的构造函数签名:公众...

使用 PHP 惰性对象构建 PSR 兼容的依赖注入容器使用 PHP 惰性对象构建 PSR 兼容的依赖注入容器

04Jan2025

在 PHP 8.4 中探索使用惰性对象的依赖注入 在现代 PHP 领域,8.4 版的发布引入了一项突破性的功能:惰性对象。这些对象提供了一种将初始化推迟到绝对必要的新方法

注入 Unity 容器依赖项的最佳方法是什么?注入 Unity 容器依赖项的最佳方法是什么?

26Dec2024

注入 Unity 容器依赖项:比较集成 Unity 时,会出现一个常见的挑战:确定最佳方法...

我应该如何访问应用程序中的 Unity 容器以进行正确的依赖项注入?我应该如何访问应用程序中的 Unity 容器以进行正确的依赖项注入?

29Dec2024

如何在应用程序中处理 Unity 容器访问当使用像 Unity 这样的依赖注入框架时,考虑如何...

如何将依赖项注入 Go 中的 Gin 路由器处理程序?如何将依赖项注入 Go 中的 Gin 路由器处理程序?

11Dec2024

使用依赖注入将参数传递给 Gin 路由器处理程序在 Golang 中,管理 Web 应用程序中的依赖关系的常见做法是......

为什么我的 .NET Core MVC 应用程序无法注入存储库依赖项?为什么我的 .NET Core MVC 应用程序无法注入存储库依赖项?

23Jan2025

依赖注入错误:无法解析 InterfaceContext 的服务一个 .NET Core MVC 应用程序在尝试...时遇到错误

See all articles