在C#中向属性的构造函数注入依赖项

德拉戈

我具有以下属性:

public class MultipleInteractivitiesAttribute : CheckBaseAttribute
{
    private readonly IInteractivityService _interactivityService;

    public MultipleInteractivitiesAttribute(IInteractivityService interactivityService)
    {
        _interactivityService = interactivityService;
    }

    public override Task<bool> ExecuteCheckAsync(CommandContext ctx, bool help)
    {
        var userId = ctx.User.Id;
        var cmdName = ctx.Command.QualifiedName;

        return Task.FromResult(!_interactivityService.CheckForUserInteractivity(userId, cmdName));
    }
}

下面的类具有使用该属性的方法。

public class RecruitmentModule : BaseCommandModule
{
    private readonly IInteractivityService _interactivityService;

    public RecruitmentModule(IInteractivityService interactivityService)
    {
        _interactivityService = interactivityService;
    }
    
    [Command("apply"), MultipleInteractivities()]
    public async Task Apply(CommandContext ctx)
    {
          // some code here
    }
}

现在,当我MultipleInteractivitiesApply方法上方使用as属性时,我会遇到问题它希望我将参数传递给其构造函数。

现在,由于我已经注入IInteractivityServiceRecruitmentModule的构造函数我尝试将其作为参数传递给我的MultipleInteractivities属性。

像这样:

[Command("apply"), MultipleInteractivities(_interactivityService)]

但是,这产生以下错误:

在静态上下文中无法访问非静态字段“ _interactivityService”

因此,我尝试_interactivityServiceRecruitmentModule此类中将字段设为静态

private static IInteractivityService _interactivityService;

现在,当将它作为参数传递给MultipleInteractivities属性时,出现以下错误

属性构造函数参数“ interactivityService”的类型为“ DiscordBot.Core.Interfaces.IInteractivityService”,这不是有效的属性参数类型

我该如何IInteractivityService传递给我MultipleInteractivitiesAttribute而不会出错。

devNull

您不需要(也不应该)将依赖项注入到属性构造函数中。而是CommandContext有一个Services属性,该属性返回IServiceProvider,您可以使用来解决依赖关系:

public class MultipleInteractivitiesAttribute : CheckBaseAttribute 
{ 
    public override Task<bool> ExecuteCheckAsync(CommandContext ctx, bool help) 
    { 
        var userId = ctx.User.Id; 
        var cmdName = ctx.Command.QualifiedName; 
        var interactivityService = ctx.Services.GetService<IInteractivityService>();

        return Task.FromResult(!interactivityService.CheckForUserInteractivity(userId, cmdName)); 
    } 
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

构造函数中的依赖注入

来自分类Dev

构造函数依赖注入WebApi属性

来自分类Dev

将依赖项注入控制器构造函数或使用属性

来自分类Dev

依赖项注入中接口的C#名称空间

来自分类Dev

如何使用Ninject和MVC4将依赖项注入FluentValidation AbstractValidator构造函数中?

来自分类Dev

具有状态构造函数参数的Akka .NET中的依赖项注入

来自分类Dev

与HttpContext中的参数一起通过构造函数依赖项注入

来自分类Dev

如何在vNext依赖项注入中创建构造函数订阅

来自分类Dev

在类主体中设置$ this-> something,不能使用构造函数依赖项注入

来自分类Dev

angular dart中的依赖项注入如何知道要传递给装饰器构造函数的元素?

来自分类Dev

DryIoc-使用构造函数注入时指定依赖项

来自分类Dev

构造函数外部的Angular 2注入依赖项

来自分类Dev

tsyringe-使用重载构造函数注入依赖项

来自分类Dev

使用“构造函数范围”注入依赖项-Autofac

来自分类Dev

C#中的依赖注入

来自分类Dev

对Xsockets构造函数的依赖注入

来自分类Dev

使用AutoMoq属性模拟构造函数依赖项

来自分类Dev

Angular:在构造函数内部声明和分配依赖项的属性

来自分类Dev

angular dart中的依赖项注入如何知道将哪个元素传递给装饰器构造函数?

来自分类Dev

构造函数注入-将两个单独的配置依赖项绑定到存储库类中

来自分类Dev

在ASP.NET Core中间件构造函数中混合依赖项注入和手动传递的参数

来自分类Dev

在ASP.NET MVC 5中使用ControllerFactory在控制器的构造函数中进行依赖项注入

来自分类Dev

Blazor 客户端在服务器控制器中托管构造函数依赖项注入

来自分类Dev

WPF布尔依赖项属性C#

来自分类Dev

构造函数依赖注入在Laravel中如何工作?

来自分类Dev

如何通过构造委托注入依赖项

来自分类Dev

全局函数中的Angular.js依赖项注入

来自分类Dev

属性中的依赖注入

来自分类Dev

如何在C#中向Lambda函数添加属性?

Related 相关文章

  1. 1

    构造函数中的依赖注入

  2. 2

    构造函数依赖注入WebApi属性

  3. 3

    将依赖项注入控制器构造函数或使用属性

  4. 4

    依赖项注入中接口的C#名称空间

  5. 5

    如何使用Ninject和MVC4将依赖项注入FluentValidation AbstractValidator构造函数中?

  6. 6

    具有状态构造函数参数的Akka .NET中的依赖项注入

  7. 7

    与HttpContext中的参数一起通过构造函数依赖项注入

  8. 8

    如何在vNext依赖项注入中创建构造函数订阅

  9. 9

    在类主体中设置$ this-> something,不能使用构造函数依赖项注入

  10. 10

    angular dart中的依赖项注入如何知道要传递给装饰器构造函数的元素?

  11. 11

    DryIoc-使用构造函数注入时指定依赖项

  12. 12

    构造函数外部的Angular 2注入依赖项

  13. 13

    tsyringe-使用重载构造函数注入依赖项

  14. 14

    使用“构造函数范围”注入依赖项-Autofac

  15. 15

    C#中的依赖注入

  16. 16

    对Xsockets构造函数的依赖注入

  17. 17

    使用AutoMoq属性模拟构造函数依赖项

  18. 18

    Angular:在构造函数内部声明和分配依赖项的属性

  19. 19

    angular dart中的依赖项注入如何知道将哪个元素传递给装饰器构造函数?

  20. 20

    构造函数注入-将两个单独的配置依赖项绑定到存储库类中

  21. 21

    在ASP.NET Core中间件构造函数中混合依赖项注入和手动传递的参数

  22. 22

    在ASP.NET MVC 5中使用ControllerFactory在控制器的构造函数中进行依赖项注入

  23. 23

    Blazor 客户端在服务器控制器中托管构造函数依赖项注入

  24. 24

    WPF布尔依赖项属性C#

  25. 25

    构造函数依赖注入在Laravel中如何工作?

  26. 26

    如何通过构造委托注入依赖项

  27. 27

    全局函数中的Angular.js依赖项注入

  28. 28

    属性中的依赖注入

  29. 29

    如何在C#中向Lambda函数添加属性?

热门标签

归档