From e6d6c2b93d911f155e8dabd042c6d48aed217f54 Mon Sep 17 00:00:00 2001 From: kaito3desuyo Date: Sat, 21 Oct 2023 21:32:06 +0900 Subject: [PATCH] translate: guide/dependency-injection-context (#887) (#898) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * translate: guide/dependency-injection-context (#887) * fix: Apply suggestions from code review アサート→検証 Co-authored-by: Suguru Inatomi --------- Co-authored-by: Suguru Inatomi --- .../guide/dependency-injection-context.en.md | 63 +++++++++++++++++++ .../guide/dependency-injection-context.md | 54 ++++++++-------- 2 files changed, 89 insertions(+), 28 deletions(-) create mode 100644 aio-ja/content/guide/dependency-injection-context.en.md diff --git a/aio-ja/content/guide/dependency-injection-context.en.md b/aio-ja/content/guide/dependency-injection-context.en.md new file mode 100644 index 000000000..1c4227a53 --- /dev/null +++ b/aio-ja/content/guide/dependency-injection-context.en.md @@ -0,0 +1,63 @@ +# Injection context + +The dependency injection (DI) system relies internaly on a runtime context where the current injector is available. +This means that injectors can only work when code is executed in this context. + +The injection context is available in these situations: + +* Construction (via the `constructor`) of a class being instantiated by the DI system, such as an `@Injectable` or `@Component`. +* In the initializer for fields of such classes. +* In the factory function specified for `useFactory` of a `Provider` or an `@Injectable`. +* In the `factory` function specified for an `InjectionToken`. +* Within a stack frame that is run in a injection context. + +Knowing when your are in an injection context, will allow you to use the [`inject`](api/core/inject) function to inject instances. + +## Class constructors + +Everytime the DI system instantiates a class, this is done in an injection context. This is being handled by the framework itself. The constructor of the class is executed in that runtime context thus allowing to inject a token using the [`inject`](api/core/inject) function. + + +class MyComponent { + private service1: Service1; + private service2: Service2 = inject(Service2); // In context + + constructor() { + this.service1 = inject(HeroService) // In context + } +} + + +## Stack frame in context + +Some APIs are designed to be run in an injection context. This is the case, for example, of the router guards. It allows the use of [`inject`](api/core/inject) to access a service within the guard function. + +Here is an example for `CanActivateFn` + +const canActivateTeam: CanActivateFn = + (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => { + return inject(PermissionsService).canActivate(inject(UserToken), route.params.id); + }; + + +## Run within an injection context + +When you want to run a given function in an injection context without being in one, you can do it with `runInInjectionContext`. +This requires to have access to a given injector like the `EnvironmentInjector` for example. + + + + +Note that `inject` will return an instance only if the injector can resolve the required token. + +## Asserts the context + +Angular provides `assertInInjectionContext` helper function to assert that the current context is an injection context. + +## Using DI outside of a context + +Calling [`inject`](api/core/inject) or calling `assertInInjectionContext` outside of an injection context will throw [error NG0203](/errors/NG0203). + + + +@reviewed 2023-04-11 \ No newline at end of file diff --git a/aio-ja/content/guide/dependency-injection-context.md b/aio-ja/content/guide/dependency-injection-context.md index 1c4227a53..f4f146511 100644 --- a/aio-ja/content/guide/dependency-injection-context.md +++ b/aio-ja/content/guide/dependency-injection-context.md @@ -1,38 +1,38 @@ -# Injection context +# インジェクションコンテキスト -The dependency injection (DI) system relies internaly on a runtime context where the current injector is available. -This means that injectors can only work when code is executed in this context. +依存性の注入 (DI) システムは、現在のインジェクターが使用可能なランタイムコンテキストに、内部的に依存します。 +つまり、インジェクターはこのコンテキストでコードが実行される場合にのみ、機能します。 -The injection context is available in these situations: +インジェクションコンテキストは、次のような場合に利用可能です。 -* Construction (via the `constructor`) of a class being instantiated by the DI system, such as an `@Injectable` or `@Component`. -* In the initializer for fields of such classes. -* In the factory function specified for `useFactory` of a `Provider` or an `@Injectable`. -* In the `factory` function specified for an `InjectionToken`. -* Within a stack frame that is run in a injection context. +* `@Injectable`や`@Component`など、DIシステムによってインスタンス化されるクラスの(`constructor`を介した)構築 +* このようなクラスのフィールドの初期化子内 +* `Provider`または`@Injectable`の`useFactory`に指定されたファクトリ関数内 +* `InjectionToken`に指定された`factory`関数内 +* インジェクションコンテキストで実行されるスタックフレーム内 -Knowing when your are in an injection context, will allow you to use the [`inject`](api/core/inject) function to inject instances. +どのような時にインジェクションコンテキスト内にいるかを知ることで、[`inject`](api/core/inject)関数を使用してインスタンスを注入できるようになります。 -## Class constructors +## クラスコンストラクター -Everytime the DI system instantiates a class, this is done in an injection context. This is being handled by the framework itself. The constructor of the class is executed in that runtime context thus allowing to inject a token using the [`inject`](api/core/inject) function. +DIシステムはクラスをインスタンス化するたびに、インジェクションコンテキストでインスタンス化を行います。これはフレームワーク自体によって処理されます。クラスのコンストラクターはそのランタイムコンテキストで実行されるため、[`inject`](api/core/inject)関数を使用してトークンを注入できます。 class MyComponent { private service1: Service1; - private service2: Service2 = inject(Service2); // In context + private service2: Service2 = inject(Service2); // コンテキスト内 constructor() { - this.service1 = inject(HeroService) // In context + this.service1 = inject(HeroService) // コンテキスト内 } } -## Stack frame in context +## コンテキスト内のスタックフレーム -Some APIs are designed to be run in an injection context. This is the case, for example, of the router guards. It allows the use of [`inject`](api/core/inject) to access a service within the guard function. +一部のAPIは、インジェクションコンテキストで実行されるように設計されています。これは、たとえばルーターガードの場合に当てはまります。これにより、[`inject`](api/core/inject)関数を使用して、ガード関数内でサービスにアクセスできるようになります。 -Here is an example for `CanActivateFn` +`CanActivateFn`の場合の例 const canActivateTeam: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => { @@ -40,24 +40,22 @@ const canActivateTeam: CanActivateFn = }; -## Run within an injection context +## インジェクションコンテキスト内で実行する -When you want to run a given function in an injection context without being in one, you can do it with `runInInjectionContext`. -This requires to have access to a given injector like the `EnvironmentInjector` for example. +インジェクションコンテキストに属さない特定の関数を、インジェクションコンテキスト内で実行したい場合は、`runInInjectionContext`を使用して実行できます。 +これには、たとえば`EnvironmentInjector`などの特定のインジェクターにアクセスできる必要があります。 -Note that `inject` will return an instance only if the injector can resolve the required token. +`inject`は、インジェクターが必要なトークンを解決できる場合にのみインスタンスを返すことに注意してください。 -## Asserts the context +## コンテキストの検証 -Angular provides `assertInInjectionContext` helper function to assert that the current context is an injection context. +Angularは、現在のコンテキストがインジェクションコンテキストであることを検証するための`assertInInjectionContext`ヘルパー関数を提供します。 -## Using DI outside of a context +## コンテキスト外でのDIの使用 -Calling [`inject`](api/core/inject) or calling `assertInInjectionContext` outside of an injection context will throw [error NG0203](/errors/NG0203). +インジェクションコンテキストの外で、[`inject`](api/core/inject)や`assertInInjectionContext`を呼び出した場合、[error NG0203](/errors/NG0203)がスローされます。 - - -@reviewed 2023-04-11 \ No newline at end of file +@reviewed 2023-04-11