代码之家  ›  专栏  ›  技术社区  ›  fuzzybear

依赖项注入无法将lambda转换为预期委托

  •  3
  • fuzzybear  · 技术社区  · 8 年前

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

    无di

    var chromeDriverService = ChromeDriverService.CreateDefaultService();
    var chromeOptions = new ChromeOptions();
    chromeOptions.AddArguments(new List<string>() { "headless" });
    
    ChromeDriver driver = new ChromeDriver(chromeDriverService, chromeOptions);
    

    当DI在startup.cs中时

     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?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Ofiris    8 年前

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

    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>());
    }));
    
    推荐文章