2016-06-14 2 views
1

Я получаю ошибку 500 при попытке получить доступ к объекту Я впрыскиваемого с помощью services.AddSingleton<>() в методе ConfigureServices в Startup.cs:Не удалось разрешить услугу типа «АБВ»

Не удалось разрешить услугу типа proj.Auth.IAuthProvider для параметра authProvider метода Configure по типу proj.Startup.

Насколько я могу сказать, глядя на "рабочие" образцы кода это должно работать ...

Startup.cs:

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(); 
    } 
} 

ответ

2

Да, это ожидается. Он не решает IHttpContextAccessor, потому что IHttpContextAccessor не зарегистрирован по умолчанию, так как в последнее время (см #190)

Вы должны зарегистрировать его вручную в ConfigureServices() как так

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 
Смежные вопросы