Угловой 6 инжектор зависимости доступа в renderModuleFactory - PullRequest
0 голосов
/ 24 июня 2018

Может кто-нибудь подсказать, как получить доступ к инжектору зависимостей , чтобы получить экземпляр service в renderModuleFactory?

На самом деле мне это нужно в файле main.server, чтобыверните правильный код статуса http для SSRС ASP.net у нас нет доступа к объекту Response, поскольку он у нас есть в случае NodeJ.

Пожалуйста, взгляните также на ASP.Net Core 2.1 Angular SSR / Universal, возвращающий статус HttpКод 404 , чтобы понять контекст.

1 Ответ

0 голосов
/ 15 июня 2019

Я только что решил эту проблему, выполнив следующее. Этому вопросу почти год, но, возможно, это все еще полезно.

export { AppServerModule } from './server/app-server.module';

// Add this line so that you can provide this token in your aspnet-rendering script as shown below.
// The reason we have to export the service here is so you can get access to the same copy used by the Angular code.
export { StatusCodeService as StatusCodeServiceToken } from './server/services/http-response.service';
const { AppServerModule, AppServerModuleNgFactory, LAZY_MODULE_MAP, StatusCodeServiceToken } = require('./../server/main.js');

export default createServerRenderer(async params => {
  // Instantiate your service manually.
  const statusCodeService = new StatusCodeService();

  const options = {
    document,
    url: params.url,
    extraProviders: [
      provideModuleMap(LAZY_MODULE_MAP),
      // Provide your instance as a value provider.
      { provide: StatusCodeServiceToken, useValue: statusCodeService }
    ]
  };

  const html = AppServerModuleNgFactory
    ? await renderModuleFactory(AppServerModuleNgFactory, options)
    : await renderModule(AppServerModule, options);

  return {
    html,
    // Then you can retrieve the value because you have the instance.
    statusCode: statusCodeService.statusCode
  }
});
...