无法将 lambda 转换为预期委托(delegate),因为 block 中的某些返回类型未隐式转换为委托(delegate)返回类型。
没有 DI
var chromeDriverService = ChromeDriverService.CreateDefaultService();
var chromeOptions = new ChromeOptions();
chromeOptions.AddArguments(new List<string>() { "headless" });
ChromeDriver driver = new ChromeDriver(chromeDriverService, chromeOptions);
在 Startup.cs 中使用 DI
services.AddScoped<ChromeDriverService>((serviceProvider =>
{
return ChromeDriverService.CreateDefaultService();
}));
//**** errors here*****
services.AddScoped<ChromeOptions>((serviceProvider =>
{ return new ChromeOptions().AddArguments(new List<string>() { "headless" }); }));
// errors here******
// how would i pass the driver service & options
services.AddScoped<ChromeDriver>(
(serviceProvider =>
{
return new ChromeDriver(chromeDriverService,chromeOptions);
}));
我如何使其可转换并将正确的选项传递给 chromeDriver ?
最佳答案
您在这一行中遇到问题:
services.AddScoped<ChromeOptions>((serviceProvider =>
{ return new ChromeOptions().AddArguments(new List<string>() { "headless" }); }));
AddScoped
输入委托(delegate)会返回 ChromeOptions
,而 .AddArguments
返回 void
怎么样:
services.AddScoped<ChromeOptions>((serviceProvider =>
{
var chromeOptions = new ChromeOptions();
chromeOptions.AddArguments(new List<string>() {"headless"});
return chromeOptions; // Return expected type
});
services.AddScoped<ChromeDriver>((s =>
{
return new ChromeDriver(s.GetService<ChromeDriverService>(),
s.GetService<ChromeOptions>());
}));
关于c# 依赖注入(inject)无法将 lambda 转换为预期的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51509724/