首页 > 解决方案 > c#依赖注入无法将lambda转换为预期的委托

问题描述

无法将 lambda 转换为预期的委托,因为块中的某些返回类型未隐式转换为委托返回类型。

无 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 ?

标签: c#asp.net-corelambdadependency-injection

解决方案


您在这一行中有一个问题:

services.AddScoped<ChromeOptions>((serviceProvider =>
{ return new ChromeOptions().AddArguments(new List<string>() { "headless" }); }));

AddScoped输入委托在返回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>());
}));

推荐阅读