Не удается разрешить службу с ограниченным доступом «Microsoft.AspNetCore.Identity.UserManager`1 [IdentityServerSample.Models.ApplicationUser]» от корневого поставщика. - PullRequest
0 голосов
/ 25 сентября 2018

Я расширяю сервер идентификации для использования пользовательской реализации сервера идентификации

 public static void UseMongoDbForIdentityServer(this IApplicationBuilder app)
    {

        //Resolve Repository with ASP .NET Core DI help 
        var repository = (IRepository)app.ApplicationServices.GetService(typeof(IRepository));

        //Resolve ASP .NET Core Identity with DI help
        var userManager = (UserManager<ApplicationUser>)app.ApplicationServices.GetService(typeof(UserManager<ApplicationUser>));

        // --- Configure Classes to ignore Extra Elements (e.g. _Id) when deserializing ---
        ConfigureMongoDriver2IgnoreExtraElements();

        var createdNewRepository = false;

        ...
}

так выглядит мой файл запуска

      public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<ConfigurationOptions>(Configuration);
     ...

        services.AddIdentityServer(
                  options =>
                  {
                      options.Events.RaiseSuccessEvents = true;
                      options.Events.RaiseFailureEvents = true;
                      options.Events.RaiseErrorEvents = true;
                  }
              )
              .AddMongoRepository()
              .AddMongoDbForAspIdentity<ApplicationUser, IdentityRole>(Configuration)
              .AddClients()
              .AddIdentityApiResources()
              .AddPersistedGrants()
            .AddDeveloperSigningCredential();
      ...

    }

И это ошибка, которую я получаю

Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution (Тип serviceType, ServiceProvider serviceProvider)..cs

   var userManager = (UserManager<ApplicationUser>)app.ApplicationServices.GetService(typeof(UserManager<ApplicationUser>));

IdentityServerSample.Startup.Configure (приложение IApplicationBuilder, окружение IHostingEnvironment) в Startup.cs

            app.UseMongoDbForIdentityServer();

System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () Microsoft.AspNet..Hosting.ConventionBasedStartup.Configure (приложение IApplicationBuilder) Microsoft.AspNetCore.ApplicationInsights.HostingStartup.ApplicationInsightsLoggerStartupFilter + <> c__DisplayClass0_0.b__0 (конструктор IApplicationBuilder) Microsoft.ApplicationInsights.AspNetCore.ApplicationInsightsStartupFilter + <> c__DisplayClass0_0.b__0 (IApplicationBuilder приложение) Microsoft.AspNetCore.Server.IISIntegration.IISSetupFilter + <> c__DisplayClass3_0.b__0 (IApplicationBuilder приложение) Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter + <> c__DisplayClass0_0.b__0 (IApplicationBuilderстроитель) Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication ()

Я знаю, что задаются аналогичные вопросы, но ни один из них не решает мою проблему

1 Ответ

0 голосов
/ 25 сентября 2018

Вам нужна область для разрешения зависимостей, зарегистрированных как области.Для его создания вы можете использовать следующее:

using(var scope = app.ApplicationServices.CreateScope())
{
    //Resolve ASP .NET Core Identity with DI help
    var userManager = (UserManager<ApplicationUser>)scope.ServiceProvider.GetService(typeof(UserManager<ApplicationUser>));
    // do you things here
}
...