束縛アトリビュートを再利用しない (#[Qualifier])

もちろん、関連性の高い束縛を同じアトリビュートでバインドすることは適切です。 例) #[ServerName]

しかしながら、ほとんどの束縛アトリビュートは1つの束縛だけを対象にします。 また、束縛アトリビュートを 無関係 の束縛に再利用することは絶対に避けてください。

迷ったときは、アトリビュートを再利用しないことです。作成するのは簡単です!

ボイラープレートコードを避けるために、アトリビュートの引数を使用して1つのアトリビュートから複数の区別をすれば良いでしょう。

例えば

enum Thing
{
    case FOO;
    case BAR;
    case BAZ;
}

#[Attribute, \Ray\Di\Di\Qualifier]
final class MyThing
{
    public function __construct(
        public readonly Thing $value
    ) {}
}

それぞれを別々のアトリビュートを定義する代わりに、 #[MyThing(Thing::FOO)], #[MyThing(Thing::BAR)], #[MyThing(Thing::BAZ)]などと引数で区別します。