我正在使用
Microsoft.Extensions.DependencyInjection
库,并且我有一个具体的类,它实现了一个名为 IInterface
的通用接口
using System.Net.Http;
namespace my.namespace
{
public class Concrete : IInterface
{
private readonly IHttpClientFactory _factory;
private readonly string _s1;
private readonly string _s2;
public Concrete(IHttpClientFactory factory, string s1, string s2)
{
_factory = factory;
_s1 = s1;
_s2 = s2;
}
}
}
在我的 IocConfig.cs 中,我注入
IHttpClientFactory
,如下所示:
services.AddHttpClient("clientName", client =>
{
});
现在我也想注入
Concrete
类。由于 s1 和 s2 参数超出了我已经定义的依赖项,我认为我应该使用显式构造函数,如下所示:
services.AddScoped<IInterface, Concrete>(sp => new Concrete(/* parameters */));
如果构造函数所需的所有参数都已经定义了依赖项,我应该这样做:
services.AddScoped<IOtherInterface, OtherConcrete>();
如何正确注入此类并提供所需的所有参数?我认为我需要显式传递 IHttpClientFactory 以及 s1 和 s2 字符串,但我不知道该怎么做。
传递给
AddScoped
的 lambda 函数采用 IServiceProvider
作为输入。您可以使用它通过调用 IHttpClientFactory
来解决 GetService<IHttpClientFactory>()
。
services.AddScoped<IInterface, Concrete>(sp
=> new Concrete(sp.GetService<IHttpClientFactory>(), "s1", "s2"));