-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRabbitEventsServiceProvider.php
More file actions
86 lines (71 loc) · 2.17 KB
/
RabbitEventsServiceProvider.php
File metadata and controls
86 lines (71 loc) · 2.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
declare(strict_types=1);
namespace RabbitEvents\Foundation;
use Illuminate\Support\Arr;
use Illuminate\Support\ServiceProvider;
use Interop\Queue\Topic;
use RabbitEvents\Foundation\Console\InstallCommand;
use RabbitEvents\Foundation\Serialization\JsonSerializer;
class RabbitEventsServiceProvider extends ServiceProvider
{
/**
* Register any events for your application.
*
* @return void
*/
public function boot(): void
{
$config = $this->resolveConfig();
$this->app->singleton(Serialization\SerializerRegistry::class, function ($app) use ($config) {
$registry = new Serialization\SerializerRegistry();
$registry->register(
$app->make($app['config']['rabbitevents.default_serializer'] ?? JsonSerializer::class),
true
);
return $registry;
});
$this->app->singleton(Contracts\Connection::class, fn() => new Amqp\Connection($config));
$this->app->singleton(
Context::class,
static fn($app) => new Context(
$app[Contracts\Connection::class],
$app[Serialization\SerializerRegistry::class]
)
);
$this->app->singleton(Topic::class);
}
public function register(): void
{
$this->registerCommands();
$this->registerPublishing();
}
/**
* @return array
* @throws \RuntimeException
*/
protected function resolveConfig(): array
{
$config = $this->app['config']['rabbitevents'];
$defaultConnection = Arr::get($config, 'default');
return Arr::get($config, "connections.$defaultConnection", []);
}
/**
* Register RabbitEvent's publishing.
*
* @return void
*/
protected function registerPublishing()
{
if ($this->app->runningInConsole()) {
$this->publishes([
__DIR__ . '/config/rabbitevents.php' => $this->app->configPath('rabbitevents.php'),
], 'rabbitevents-config');
}
}
protected function registerCommands()
{
$this->commands([
InstallCommand::class,
]);
}
}