Skip to content

Commit

Permalink
beforeConstruct -> beforeCreate, README
Browse files Browse the repository at this point in the history
  • Loading branch information
zheksoon committed Apr 12, 2024
1 parent 070b9e1 commit 07000f0
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 7 deletions.
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,22 @@ const parentInstance = child.inject(ParentClass);
const childInstance = child.inject(ChildClass);
```

## Injection hooks

When registering a class, you can provide hooks that will be called before the instance is created or injected:

```typescript
container.register({
class: MyClass,
beforeInject: (container, descriptor, args) => {
console.log("Before inject");
},
beforeCreate: (container, descriptor, args) => {
console.log("Before create");
},
});
```

## Async injection and circular dependencies

When you have a circular dependency, there will be an error `Circular dependency detected`. To solve this problem, you can use async injection.
Expand Down
4 changes: 2 additions & 2 deletions src/container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ export class Container {
}

if (!instance) {
if (descriptor.beforeConstruct) {
descriptor.beforeConstruct(this, descriptor, args);
if (descriptor.beforeCreate) {
descriptor.beforeCreate(this, descriptor, args);
}

instance = new cls(...args);
Expand Down
2 changes: 1 addition & 1 deletion src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ type TokenType<T, R = any> = T extends Token<infer U> ? U : R;

type BaseDescriptor = {
beforeInject?: (container: Container, descriptor: AnyDescriptor, args: any[]) => any;
beforeConstruct?: (container: Container, descriptor: AnyDescriptor, args: any[]) => any;
beforeCreate?: (container: Container, descriptor: AnyDescriptor, args: any[]) => any;
};

export type TokenValueDescriptor<T extends Token<any>> = BaseDescriptor & {
Expand Down
8 changes: 4 additions & 4 deletions test/dioma.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1676,7 +1676,7 @@ describe("Dioma", () => {

container.register({
class: TokenClass,
beforeConstruct: (container, descriptor, args) => {
beforeCreate: (container, descriptor, args) => {
called = true;
containerArg = container;
descriptorArg = descriptor;
Expand Down Expand Up @@ -1711,7 +1711,7 @@ describe("Dioma", () => {

container.register({
class: TokenClass,
beforeConstruct: (container, descriptor, args) => {
beforeCreate: (container, descriptor, args) => {
called += 1;
containerArg = container;
descriptorArg = descriptor;
Expand Down Expand Up @@ -1746,7 +1746,7 @@ describe("Dioma", () => {

container.register({
class: TokenClass,
beforeConstruct: (container, descriptor, args) => {
beforeCreate: (container, descriptor, args) => {
called += 1;
containerArg = container;
descriptorArg = descriptor;
Expand Down Expand Up @@ -1781,7 +1781,7 @@ describe("Dioma", () => {

container.register({
class: TokenClass,
beforeConstruct: (container, descriptor, args) => {
beforeCreate: (container, descriptor, args) => {
called += 1;
containerArg = container;
descriptorArg = descriptor;
Expand Down

0 comments on commit 07000f0

Please sign in to comment.