【发布时间】:2016-06-15 18:10:59
【问题描述】:
在尝试将我的 asp.net 核心应用程序从 1.0 RC1 移植到 1.0 RC2 后,我无法启动它。我得到的启动错误是这样的:
Unhandled Exception: System.Exception: Could not resolve a service of type 'Microsoft.Extensions.Configuration.IConfiguration' for the parameter 'configuration' of method 'Configure' on type 'MYCOMPANY.MYTHING.Api.Startup'.
at Microsoft.AspNetCore.Hosting.Startup.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
at MYCOMPANY.MYTHING.Api.Program.Main(String[] args)
我不知道这应该如何工作。
我理解的部分是:
我的 startup.cs 代码对我来说看起来是正确的,在 Startup(IHostingEnvironment env) 中,我创建了一个 ConfigurationBuilder 并将 Startup.Configuration 设置为等于 builder.Build()。也到达了 ConfigureServices 方法,并且在那里存在 Configuration 对象。
在 Program.cs 中到达 host.Run() 代码时,我遇到了崩溃。
永远无法达到Configure(app,env,loggerFactory,configuration,respository...) 方法。
-
在 RC1 中曾经有这样一行:
services.AddInstance<IConfiguration>(Configuration); 在新应用程序中不再存在的 RC2 中(我正在阅读一个可以运行的新应用程序并尝试逐行比较)。
我一直在寻找如何使这项工作,以及如何理解 IConfigurationRoot 的依赖注入,但我没有看到任何似乎对这种注入负责的属性或代码。
更新:似乎我在 RC1 代码中使用了一些 RC2 不再支持的奇怪模式。在我从 Configure() 方法中删除一些附加参数后,.net 核心启动代码再次调用它。
【问题讨论】:
-
我想看看你的 Startup 的 Configure 方法,注意 services.AddInstance 更改为 .AddSingleton for rc2,但是你不需要将 IConfiguration 注入到 Configure 方法中,它应该被持久化作为 Startup 构造函数中的属性,则可以在 Configure 方法中访问该属性
标签: c# dependency-injection asp.net-core