小编Cla*_*olz的帖子

在新的switch c# 8.0中使用lambda函数返回值

我想在我的代码中使用新的开关,对于方法结果 make log 并 return IActionResult

我尝试做这样的事情:

var response = (this._coreRepository.Write(value.Content, data.Id.ToString())); \\return bool
return response switch
{
   true => () =>
   {
      this._log.LogInformation("Write is complited");
      return Ok();
   },
   false => () =>
   {
      this._log.LogInformation("Error in writing");
      return BadRequest();
   },
   _     => () =>
   {
      throw new Exception("Unexpected error");
   }
};
Run Code Online (Sandbox Code Playgroud)

但编译器对我说cannot convert lambda expression to type 'IActionResult' because it is not a delegate type

我该如何修复它?

c# lambda c#-8.0 switch-expression

4
推荐指数
1
解决办法
2450
查看次数

如何在单例中使用作用域依赖注入

我有一个范围服务(让它成为UserContext包含用户IP的服务)。它服务我尝试注入另一个服务(让我们称它们为ProfileManagerLogerProvider)。

在启动时的控制器中,我像这样添加了它们:

service
   .AddTransient(ILogerProvider, LogerProvider)()
   .AddSingleton<IProfileManager, ProfileManager)()
   .AddScoped<IUserContext, UserContext>()
Run Code Online (Sandbox Code Playgroud)

LogerProvider包含UserContext注入:

class LogerProvider: ILogerProvider
{
   private readonly IUserContext _userContext;

   public LogerProvider(IUserContext userContext)
   {
      _userContext = userContext;
   }
}
Run Code Online (Sandbox Code Playgroud)

ProfileManager包含LogerProvider注入:

class ProfileManager: IProfileManager
{
   private readonly ILogerProvider _logerProvider;

   public ProfileManager(ILogerProvider logerProvider)
   {
      _logerProvider = logerProvider;
   }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行我的程序时,出现错误:

(Inner Exception #1) System.InvalidOperationException: Error while validating the service descriptor 'ServiceType: IProfileManager Lifetime: Singleton ImplementationType: IProfileManager': Cannot consume scoped service …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection .net-core

3
推荐指数
1
解决办法
4311
查看次数