首页 > 解决方案 > 无法从根提供商解析范围服务“Updater.Service.IBridgeService”

问题描述

我正在开发 .NET Core 5 控制台应用程序,并尝试在运行应用程序时使用 DI 注入服务,但出现此错误“无法从根提供程序解析范围服务 'Updater.Service.IBridgeService'”。

如果我将 IBridgeService 从范围服务中取出,它工作正常,但我想传递 BridgeService 以便我不想创建它的对象。

线路错误

var svc = ActivatorUtilities.CreateInstance<RIUProcess>(host.Services);

代码

程序.cs

Class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Read, Load appsettings json
                var builder = new ConfigurationBuilder();
                BuildConfig(builder);

                //Setup Serilog
                Log.Logger = new LoggerConfiguration()
                    .MinimumLevel.Debug()
                    .ReadFrom.Configuration(builder.Build())
                    .Enrich.FromLogContext()
                    .WriteTo.Console()
                    .WriteTo.File(@"Log\Log.log")
                    .CreateLogger();

                Log.Logger.Information($"Application Running in {Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT")} mode");

                var host = Host.CreateDefaultBuilder()
                    .ConfigureServices((context, services) =>
                    {
                        services.AddLogging(configure => configure.AddSerilog());
                        services.AddTransient<IRIUProcess, RIUProcess>();
                        services.AddScoped<IBridgeService, BridgeService>();
                        services.AddScoped<IWarehouseService, WarehouseService>();
                    })
                    .UseSerilog()
                    .Build();

                var svc = ActivatorUtilities.CreateInstance<RIUProcess>(host.Services);
                svc.Run(args);
            }
            catch (Exception ex)
            {
                Log.Logger.Error(ex.ToString());
            }
        }

        static void BuildConfig(IConfigurationBuilder builder)
        {
            builder.SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT")}", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables();
        }
    }

RIUProcess.cs

public class RIUProcess : IRIUProcess
    {
        #region Variables
        private readonly ILogger<RIUProcess> _log;
        private readonly IConfiguration _config;
        private readonly IBridgeService _bridgeService;
        #endregion

        #region RIUProcess
        public RIUProcess(ILogger<RIUProcess> log, IConfiguration config, IBridgeService bridgeService)
        {
            this._log = log;
            this._config = config;
            this._bridgeService = bridgeService;
        }
        #endregion

        public void Run(string[] args)
        {
           .... code
        }
}

谢谢你的帮助。

标签: c#.net-core

解决方案


推荐阅读