Identifier: string | symbol

You can use any string or Symbol as identifier. The identifier is used to register a class in the TSinjex DI (Dependency Injection) container. See Hierarchical identifiers for more information on . in identifiers.

To create hierarchical identifiers, you can use a dot . as a separator. E.g. Parent.Child or Parent.Child.Grandchild.

You can merge multiple dependencies into one by resolving them with a identifier that is a prefix of the actual identifiers. E.g. Parent resolves Parent.* and returns a mixin of all children. Merging will only work, if the main identifier is not registered. Grandchildren are not included in the mixin but you can use something like Parent.Child.Grandchild to merge all direct children of Grandchild, e.g. Parent.Child.Grandchild.*. If you don't want to allow merging, you must register the dependencies with the full identifier. E.g. Parent or Parent.Child.Grandchild.

The name of a dependency should generally correspond to the interface that is implemented. E.g. a class ClassA that implements the interface IClassA and is registered as a dependent class is registered under the interface name IClassA.

The mixin parts of the class are registered under the interface name IClassA.*. E.g. IClassA.IClassZ, IClassA.IClassY, etc.

The identifier for a static or constructor dependency should be the same as the class name postfixed with _. E.g. IClassA_ for the the static or constructor interface of class IClassA.