2016-06-14 7 views
1

Ich erhalte einen 500-Fehler, wenn ich Zugriff versuchen, ein Objekt I services.AddSingleton<>() im ConfigureServices Verfahren in Startup.cs mit injizierten haben:kann nicht einen Dienst vom Typ ‚xyz‘ lösen

kann nicht einen Dienst vom Typ lösen proj.Auth.IAuthProvider für den Parameter authProvider der Methode Configure auf Typ proj.Startup.

Soweit ich aus der Betrachtung "arbeiten" Codebeispiele sollte dies funktionieren ...

Startup.cs sagen kann:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddOptions(); 
    services.Configure<AppSettings>(Configuration); 
    services.AddSingleton<IAuthProvider, TranslatorAuthProvider>(); 
    services.AddMvc(); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IAuthProvider authProvider) 
{ 
    ... 

    app.Run(async context => 
    { 
     await authProvider.GetToken(); 
    }); 

    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "default", 
      template: "{controller=Home}/{action=Index}/{id?}"); 
    }); 
} 

TranslatorAuthProvider.cs:

namespace proj.Auth 
{ 
    public class TranslatorAuthProvider : IAuthProvider 
    { 
     public TranslatorAuthProvider(IHttpContextAccessor httpContextAccessor, IOptions<AppSettings> settings) 
     { 
      ... 
     } 

     public async Task<OAuthToken> GetToken() 
     { 
      ... 
     } 
    } 
} 

IAuthProvider.cs:

namespace proj.Auth 
{ 
    public interface IAuthProvider 
    { 
     Task<OAuthToken> GetToken(); 
    } 
} 

Antwort

2

Ja das ist zu erwarten. Es schlägt fehl IHttpContextAccessor zu lösen, weil die IHttpContextAccessor nicht seit kurzem standardmäßig registriert ist (siehe #190)

Sie sollten es manuell wie so

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 
in ConfigureServices() registrieren
Verwandte Themen