【发布时间】:2019-11-20 16:38:38
【问题描述】:
我有一个类库,我在 .NET Core Web API (netcoreapp2.2) 的 Main() 方法中实例化了一个类,用于检索 Web API 的配置:
public static void Main(string[] args)
{
var configBuilder = new ConfigBuilder("configuration-v1.json").Build();
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(configuration)
.UseStartup<Startup>()
.Build()
.Run();
}
构造函数ConfigBuilder是:
public AwsConfigurationBuilder(string configKey, IAmazonS3ClientAdapter s3Client)
我在Startup.cs 中的ConfigureServices 方法是:
public void ConfigureServices(IServiceCollection services)
{
services
.AddScoped<IAmazonS3ClientAdapter, AmazonS3ClientAdapter>()
.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
我收到以下关于 ConfigBuilder 实例化的错误:
There is no argument given that corresponds to the required formal parameter 's3Client' of 'ConfigBuilder.ConfigBuilder(string, IAmazonS3ClientAdapter)' [Foo.BarService]csharp(CS7036)
难道不能在服务的Main 方法中进行依赖注入吗?
【问题讨论】:
-
这不是 DI 的工作方式。如果您希望 DI 创建您的对象,那么您不能自己直接调用构造函数(换句话说,避免使用
new关键字)。如果您不熟悉 DI 概念,我强烈建议您观看 this video。 -
new Whatever()不是 DI。话虽如此,您不能在Main中使用 DI,因为这实际上是您运行的应用程序的第一件事。只有稍后 DI 才可用。 -
当前状态下的问题不完整,因此不清楚。您能否重新格式化问题,以便我们更清楚地了解当前问题以及您实际上想要做什么?请参阅How to Ask 页面以获得澄清此问题的帮助。
标签: c# .net dependency-injection .net-core