【问题标题】:c# Dependency Injection cannot convert lambda to intended delegatec#依赖注入无法将lambda转换为预期的委托
【发布时间】:2018-07-25 13:55:41
【问题描述】:

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

【问题讨论】:

  • .AddArguments(...); 返回什么?是ChromeOptions的实例吗?
  • 除了ChromeDriver之外,你还有依赖Chrome OptionsChromeDiverService的服务吗?如果是这样,您可能需要考虑仅注册ChromeDriver
  • 是的,也看到了 chromeoptions 的新闻

标签: c# asp.net-core lambda dependency-injection


【解决方案1】:

你在这行有问题:

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>());
}));

【讨论】:

  • 这确实有效:) thx,但我如何将它们传递给 services.AddScoped
  • 我知道 services.AddScoped( (s => { return new ChromeDriver(s.GetService(), s.GetService()); })); ,请更新您的答案,最后您还缺少一个 )。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多