Dependency injection failure in ASP.NET Core RC2
尝试将ASP.NET核心应用程序从1.0 RC1移植到1.0 RC2后,无法启动它。我得到的启动错误是:
1 2 3 4 5 | 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(ihostingvironment env)中,我创建了一个configuration builder,并将startup.configuration设置为builder.build()。也达到了configureServices方法,并且存在配置对象。
当在program.cs中到达host.run()代码时,我会崩溃。
配置(app,env,loggerfactory,configuration,resposiory…)方法从未达到。
在RC1中,曾经有这样一条线:
1services.AddInstance<IConfiguration>(Configuration);在一个新应用程序中不再存在的RC2中(我正在阅读一个有效的新应用程序,并尝试逐行比较)。
我一直在寻找如何实现这一点,以及如何理解IConfigurationRoot的依赖项注入,但是我没有看到任何属性或代码似乎是导致这一注入的原因。
更新:似乎我在RC1代码中使用了一些奇怪的模式,RC2不再支持这种模式。在我从configure()方法中删除了一些附加参数之后,.NET核心启动代码再次调用了它。
看起来您已经解决了这个问题,但是对于配置方法的限制并不像您建议的那样困难和快速。
限制是必须有一个名为
显然,您不需要将您的
1 2 3 4 5 6 7 8 9 | public void ConfigureServices(IServiceCollection services) { services.AddSingleton<ISuperSecretClass, SuperSecretClass>(); } public void Configure(IApplicationBuilder app, ISuperSecretClass instance) { //do something with instance } |
作为参考,我检查了Startuploader源中的
如果要注入
1 2 3 4 | services.AddSingleton((provider)=> { return Configuration; }); |