Извлечение фабричного метода из useFactory () - PullRequest
0 голосов
/ 03 мая 2020

Обучение DI в Angular по следующим книжным примерам. Я понимаю, что если мы хотим использовать фабрики, мы должны сказать, какой метод использовать. Но в примере, который я описал, метод внутри useFactory был определен напрямую, что делает его непонятным для меня в качестве первого примера.

Я просмотрел Angular документы, и они создали отдельный метод и только в одной строке они скажем, что это метод, который useFactory должен использовать. Я попытался извлечь этот метод и сделать это таким образом, чтобы я мог понять его лучше, но я теряюсь в синтаксисе.

Может кто-нибудь, пожалуйста, извлеките метод, который они здесь передают, в useFactory (), так что, возможно, я смогу лучше понять его?

  providers: [
    {
      // `AnalyticsService` is the _token_ we use to inject
      // note, the token is the class, but it's just used as an identifier!
      provide: AnalyticsService,
      // useFactory is a function - whatever is returned from this function will be injected
      useFactory() {
        // create an implementation that will log the event
        const loggingImplementation: AnalyticsImplementation = {
          recordEvent: (metric: Metric): void => {
            console.log('The metric is:', metric);
          }
        };
        // create our new `AnalyticsService` with the implementation
        return new AnalyticsService(loggingImplementation);
      }
    }
  ],

Поэтому я думаю, что я хочу извлечь метод из этого

1 Ответ

0 голосов
/ 03 мая 2020

Как насчет этого: это будет правильно?

const loggingImplementation: AnalyticsImplementation = {
  recordEvent: (metric: Metric): void => {
    console.log('The metric is:', metric);
  }
};

export function loggerFactory(): AnalyticsService {
  return new AnalyticsService(loggingImplementation);
}

@NgModule({
  imports: [CommonModule],
  providers: [
    { provide: AnalyticsService, useFactory: loggerFactory}
  ],
  declarations: [ ]
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...