Skip to content

Commit 8b3b956

Browse files
authored
alias check updates (#5)
* - update the DI to check the abstract aliases when calling the other isAvailable and hasShared methods * - update the DI slighly to respect additional inputs correctly - add some unit tests for the new functions * - missed this assert
1 parent 3028a47 commit 8b3b956

2 files changed

Lines changed: 49 additions & 0 deletions

File tree

src/DependencyInjector.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,21 @@ public function share($abstract, $instance, $mode = self::MODE_MUTABLE)
192192
public function hasShared($abstract, ?string $checkMode = null): bool
193193
{
194194
$exists = isset($this->_instances[$abstract]);
195+
196+
if(!$exists && isset($this->_aliases[$abstract]))
197+
{
198+
return $this->hasShared($this->_aliases[$abstract][0], $checkMode);
199+
}
200+
195201
return !$exists || $checkMode === null ? $exists : $this->_instances[$abstract]['mode'] === $checkMode;
196202
}
197203

198204
public function isAvailable($abstract, $shared = null): bool
199205
{
206+
if(isset($this->_aliases[$abstract]))
207+
{
208+
return $this->isAvailable($this->_aliases[$abstract][0], $shared);
209+
}
200210
if($shared === false)
201211
{
202212
return isset($this->_factories[$abstract]);

tests/DependencyInjectorTest.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,45 @@ public function testResolve()
254254
static::assertEquals('dark apple', $result);
255255
}
256256

257+
public function testAliasIsAvailable()
258+
{
259+
$di = new DependencyInjector();
260+
261+
$this->assertFalse($di->isAvailable(CacheInterface::class));
262+
$di->aliasAbstract(CacheInterface::class, Cache::class);
263+
$this->assertFalse($di->isAvailable(CacheInterface::class));
264+
265+
$di->share(Cache::class, new Cache());
266+
$this->assertTrue($di->isAvailable(CacheInterface::class));
267+
$this->assertTrue($di->isAvailable(CacheInterface::class, true));
268+
$this->assertFalse($di->isAvailable(CacheInterface::class, false));
269+
270+
$di2 = new DependencyInjector();
271+
$di2->aliasAbstract(CacheInterface::class, Cache::class);
272+
$di2->factory(Cache::class, fn() => new Cache());
273+
$this->assertTrue($di2->isAvailable(CacheInterface::class, false));
274+
}
275+
276+
public function testAliasHasShared()
277+
{
278+
$di = new DependencyInjector();
279+
$di->aliasAbstract(CacheInterface::class, Cache::class);
280+
$this->assertFalse($di->hasShared(CacheInterface::class));
281+
282+
$di->share(Cache::class, new Cache());
283+
$this->assertTrue($di->hasShared(CacheInterface::class));
284+
}
285+
286+
public function testAliasHasSharedWithCheckMode()
287+
{
288+
$di = new DependencyInjector();
289+
$di->aliasAbstract(CacheInterface::class, Cache::class);
290+
$di->share(Cache::class, new Cache(), DependencyInjector::MODE_IMMUTABLE);
291+
292+
$this->assertTrue($di->hasShared(CacheInterface::class, DependencyInjector::MODE_IMMUTABLE));
293+
$this->assertFalse($di->hasShared(CacheInterface::class, DependencyInjector::MODE_MUTABLE));
294+
}
295+
257296
public function testAliasAbstract()
258297
{
259298
$di = new DependencyInjector();

0 commit comments

Comments
 (0)