【发布时间】:2019-01-07 14:23:37
【问题描述】:
我使用的是 ASP.Net core 1 而不是 2,并尝试让 OpenIdDict 的示例在我的系统上运行。我做了一些小改动,使项目可以为我构建。但是我在调试时遇到错误并且不知道如何处理它。有人对我有想法/提示吗?非常感谢!
System.InvalidOperationException:无法解析服务类型 'Microsoft.Extensions.Configuration.IConfiguration' 尝试 激活“AuthorizationServer.Startup”。在 Microsoft.Extensions.Internal.ActivatorUtilities.ConstructorMatcher.CreateInstance(IServiceProvider 提供者)在 Microsoft.AspNetCore.Hosting.Internal.StartupLoader.LoadMethods(IServiceProvider 服务,类型启动类型,字符串环境名称)在 Microsoft.AspNetCore.Hosting.WebHostBuilderExtensions.c__DisplayClass1_0.b__1(IServiceProvider sp) 在 Microsoft.Extensions.DependencyInjection.ServiceProvider.ScopedCallSite.Invoke(ServiceProvider 提供者)在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider 提供者,类型 serviceType) 在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider 提供者)在 Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureStartup() 在 Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices() 在 Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
编辑:添加程序代码
using System;
using System.Threading.Tasks;
using AuthorizationServer.Models;
using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using OpenIddict.Abstractions;
using OpenIddict.Core;
using OpenIddict.EntityFrameworkCore.Models;
using System.Net.Http;
using Microsoft.AspNetCore.Authentication.Cookies;
namespace AuthorizationServer
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var connection = @"...";
services.AddDbContext<ApplicationDbContext>(options =>
{
options.UseSqlServer(connection);
options.UseOpenIddict();
});
services.AddOpenIddict()
.AddCore(options =>
{
options.UseEntityFrameworkCore()
.UseDbContext<ApplicationDbContext>();
})
.AddServer(options =>
{
options.UseMvc();
options.EnableTokenEndpoint("/connect/token");
options.AllowClientCredentialsFlow();
options.DisableHttpsRequirement();
})
.AddValidation();
services.AddSingleton(Configuration); //changed here
}
public void Configure(IApplicationBuilder app)
{
app.UseDeveloperExceptionPage();
app.UseOAuthValidation();
//app.UseAuthentication();
app.UseMvcWithDefaultRoute();
app.UseWelcomePage();
InitializeAsync(app.ApplicationServices).GetAwaiter().GetResult();
}
private async Task InitializeAsync(IServiceProvider services)
{
using (var scope = services.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
var context = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
await context.Database.EnsureCreatedAsync();
var manager = scope.ServiceProvider.GetRequiredService<OpenIddictApplicationManager<OpenIddictApplication>>();
if (await manager.FindByClientIdAsync("console") == null)
{
var descriptor = new OpenIddictApplicationDescriptor
{
ClientId = "console",
ClientSecret = "388D45FA-B36B-4988-BA59-B187D329C207",
DisplayName = "My client application",
Permissions =
{
OpenIddictConstants.Permissions.Endpoints.Token,
OpenIddictConstants.Permissions.GrantTypes.ClientCredentials
}
};
await manager.CreateAsync(descriptor);
}
}
}
}
}
程序.cs
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace AuthorizationServer
{
public static class Program
{
public static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.AddCommandLine(args)
.Build();
var host = new WebHostBuilder()
.ConfigureLogging(options => options.AddConsole())
.ConfigureLogging(options => options.AddDebug())
.UseConfiguration(configuration)
.UseIISIntegration()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
}
【问题讨论】:
标签: c# asp.net-core