无法解析类型 Microsoft 扩展配置 IConfiguration 的服务
Posted
技术标签:
【中文标题】无法解析类型 Microsoft 扩展配置 IConfiguration 的服务【英文标题】:Unable to resolve service for type Microsoft Extensions Configuration IConfiguration 【发布时间】:2019-12-14 05:07:20 【问题描述】:我遇到了这个错误,这辈子都无法理解。
在尝试激活“Microsoft.FeatureManagement.ConfigurationFeatureSettingsProvider”时无法解析“Microsoft.Extensions.Configuration.IConfiguration”类型的服务。
这是一个简单的 .net core 2.2 控制台应用,添加了以下 nuget 包。
-
Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.DependencyInjection
Microsoft.FeatureManagement
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.FeatureManagement;
using Microsoft.FeatureManagement.FeatureFilters;
namespace ConfigurationConsoleApp
class Program
static async Task Main(string[] args)
const string FeatureName = "Beta";
var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var services = new ServiceCollection();
services.AddSingleton(configuration).AddFeatureManagement().AddFeatureFilter<PercentageFilter>().AddFeatureFilter<AccountIdFilter>();
var serviceProvider = services.BuildServiceProvider();
var featureManager = serviceProvider.GetRequiredService<IFeatureManager>();
var enabled = await featureManager.IsEnabledAsync(FeatureName);
Console.WriteLine($"The FeatureName feature is (enabled ? "enabled" : "disabled") ");
// The following are the command for the packages.
dotnet add package Microsoft.Extensions.Configuration.Json --version 2.1.1
dotnet add package Microsoft.Extensions.DependencyInjection --version 2.1.1
dotnet add package Microsoft.FeatureManagement --version 2.0.0-preview-010610001-1263
【问题讨论】:
这能回答你的问题吗? ASP.NET Core Dependency Injection error: Unable to resolve service for type while attempting to activate 【参考方案1】:好的,这是在拉了几个小时的头发之后。
services.AddSingleton(configuration).AddFeatureManagement().AddFeatureFilter<PercentageFilter>().AddFeatureFilter<AccountIdFilter>();
should be
services.AddSingleton<IConfiguration>(configuration).AddFeatureManagement().AddFeatureFilter<PercentageFilter>().AddFeatureFilter<AccountIdFilter>();
注意通用的<IConfiguration>
我还注意到,将配置对象声明为 IConfiguration 也可以解决问题。使用 var 声明配置会出现问题。使用 IConfiguration 代替 var。然后问题又消失了。
【讨论】:
【参考方案2】:很抱歉将此作为答案发表评论,但如果您在新项目中使用上述代码,请务必小心。它仍然进入根目录进行搜索,当您有 2 个具有相同 application.Environment.json 的项目时可能会导致问题
var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
【讨论】:
以上是关于无法解析类型 Microsoft 扩展配置 IConfiguration 的服务的主要内容,如果未能解决你的问题,请参考以下文章
InvalidOperationException:无法解析“Microsoft.AspNetCore.Http.IHttpContextAccessor”类型的服务
无法解析 Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger 类型的服务
尝试激活“AuthenticateController”时无法解析“Microsoft.AspNetCore.Identity.UserManager”类型的服务
尝试激活“AuthController”时无法解析“Microsoft.AspNetCore.Identity.UserManager”类型的服务
运行所选代码生成器时出错:无法解析类型“Microsoft.EntityFrameworkCore.DbContextOption”的服务
无法解析类型“Microsoft.Extensions.Logging.ILogger`1[WebApplication1.Startup]”的服务