Hey,
ich prügel mich gerade mal wieder mit Thema Dependency Injection bzw. der Extension-Method um den Service zu registrieren.
Aktuelle Implementierung
Konkret geht es um folgende Zeile:
Der Teil ist aktuell hardcoded, jedoch ist
Ich stehe gerade total auf dem Schlauch und krieg es nicht hin, das als Parameter zu realisieren.
Was ich gefunden habe, wäre folgendes:
Spoiler anzeigen
Aber
Den
Irgendwer eine schlaue Idee?
ich prügel mich gerade mal wieder mit Thema Dependency Injection bzw. der Extension-Method um den Service zu registrieren.
C#-Quellcode
- internal static IServiceCollection AddGraphClient(this IServiceCollection services, IConfiguration proxyConfig, IConfiguration credentialConfig)
- {
- services.Configure<GraphAuthProxySettings>(proxyConfig);
- services.Configure<GraphAuthCredentialSettings>(credentialConfig);
- services.AddSingleton<IGraphAuthService, GraphAuthService>();
- services.AddSingleton<IIdentityLogger, GraphAuthIdentityLogger>();
- services.AddSingleton<IMsalHttpClientFactory, GraphAuthHttpClientFactory>();
- services.AddTransient<DelegatingHandler, GraphAuthTokenHandler>();
- services.AddSingleton(sp =>
- {
- var handlers = GraphClientFactory.CreateDefaultHandlers();
- handlers.Add(sp.GetRequiredService<GraphAuthTokenHandler>());
- handlers.Add(sp.GetRequiredService<HttpLoggingHandler>()); // um die Zeile geht es
- var httpClient = GraphClientFactory.Create(handlers);
- return new GraphServiceClient(httpClient);
- });
- return services;
- }
Konkret geht es um folgende Zeile:
handlers.Add(sp.GetRequiredService<HttpLoggingHandler>());
Der Teil ist aktuell hardcoded, jedoch ist
HttpLoggingHandler
nicht Bestandteil der Library und soll veränderbar sein.Ich stehe gerade total auf dem Schlauch und krieg es nicht hin, das als Parameter zu realisieren.
Was ich gefunden habe, wäre folgendes:
C#-Quellcode
- internal static IServiceCollection AddGraphClient<TService>(this IServiceCollection services, IConfiguration proxyConfig, IConfiguration credentialConfig, Func<IServiceProvider, TService> factory) where TService : DelegatingHandler
- {
- TService finalHandler = factory(services.BuildServiceProvider());
- // ...
- services.AddSingleton(sp =>
- {
- var handlers = GraphClientFactory.CreateDefaultHandlers();
- handlers.Add(sp.GetRequiredService<GraphAuthTokenHandler>());
- handlers.Add(finalHandler);
- var httpClient = GraphClientFactory.Create(handlers);
- return new GraphServiceClient(httpClient);
- });
- return services;
- }
Aber
services.BuildServiceProvider()
aufzurufen ist keine gute Idee und bringt Probleme mit der Service LifeTime etc.Den
DelegatingHandler
direkt als Parameter zu übergeben ist auch problematisch, da er so von Hand erstellt werden muss und wir wieder beim Thema "Service LifeTime" wären.Irgendwer eine schlaue Idee?
Antivirus 2.0: Der perfekte Schutz gegen Malware > Weitere Informationen
Debuggen, Fehler finden und beseitigen
Updater - Worauf sollte man bei eigenen Updatern achten?
Debuggen, Fehler finden und beseitigen
Updater - Worauf sollte man bei eigenen Updatern achten?