так что я наконец сделал это, и это было не так сложно, в конце концов. Плохо пройдусь по ступеням, что из всей моей "адальной" конфигурации.
пожалуйста, обратитесь к следующей статье, которая очень помогла:
https://devblogs.microsoft.com/premier-developer/angular-how-to-microsoft-adal-for-angular-6-with-configurable-settings/
app.module.ts:
export let adalConfig
export function getConfig(){
return adalConfig
}
вышеуказанная функция будет использоваться (в разделе провайдеров) для предоставления массиву провайдеров переменной adalConfig.
export function loadConfigurations(connectionService: ConnectionService) {
return () => connectionService.getConfigs().then(((adalConficObj: azureActiveDirectoryModel)=> {
adalConfig = {
tenant: adalConficObj.Tenant,
clientId: adalConficObj.ClientID,
redirectUri: window.location.origin,
endpoints: {
[adalConficObj.EndPoint]: adalConficObj.ObjectID,
},
navigateToLoginRequestUrl: false,
}
}));
}
в приведенной выше функции я возвращаю функцию, которая разрешает Обещание (я буду использовать эту функцию в APP_INITIALIZER, для которого требуется Обещание - в противном случае вы получите ошибку)
Обещание от My connectionService, который в моем приложении отвечает за подключение к нашему серверу. getConfigs () очень прост:
getConfigs(): Promise<Object> {
return this.HttpClient.get(this.getURL('GetAzureActiveDirectoryconfiguration')).toPromise()
}
http / httpClient использует наблюдаемые и подписку, но, поскольку я хочу обещание, я использую функцию .toPromise.
Если вы прочитали статью, вы увидели, что я не запускал MsAdalAngular6Module с помощью forRoot (), потому что я хотел получить всю информацию adalConfig с сервера.
imports: [
c.MsAdalAngular6Module,
],
Насколько я понимаю, MsAdalAngular6Module будет использовать предоставленные переменные в массиве провайдеров, чтобы создать MsAdalAngular6Service (опять же, изолированный с помощью жестко закодированных в forRoot ())
массив провайдеров в app.modules:
{
provide: APP_INITIALIZER,
useFactory: loadConfigurations,
deps: [ConnectionService], // dependancy
multi: true
},
{
provide: 'adalConfig',
useFactory: getConfig,
deps: []
},
MsAdalAngular6Service
APP_INITIALIZER в основном останавливает запуск приложения, пока не завершится функция, предоставленная в useFactory.
В следующем разделе мы используем, чтобы «дать» массиву провайдеров наш объект adalConfig после того, как он имеет соответствующие данные. мы предоставляем саму переменную (обеспечить: 'adalConfig'), чтобы эта функция могла возвращать ее (useFactory: getConfig,), поскольку getConfig () не использует переданные ей свойства, deps: избыточен.
Я действительно надеюсь, что это помогло, и если я что-то не так, пожалуйста, поправьте меня.
для получения дополнительной информации вы можете обратиться к:
https://angular.io/guide/dependency-injection-providers
Angular: как правильно реализовать APP_INITIALIZER