为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Asp.Net Core DI 的服务的配置范围

使用 Asp.Net Core DI 的服务的配置范围

C#
紫衣仙女 2021-10-24 18:03:41
是否可以在 Asp.Net Core 中为默认 DI 设置注入范围?我的意思是例如:services.AddSingleton<IUser, UserService>services.AddSingleton<IUser, UserService>对于第二个配置,以某种方式指定它应该只注入到 HomeController。不像第一个应该注入所有其他人。是否可以使用默认 DI?
查看完整描述

2 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

我的直觉是这可能是您想要实现的目标,或者可能是更好的方法,并且您可能将 User 与 UserService 混为一谈。当您有同一个接口的多个实现时,DI 会将它们添加到一个集合中,因此可以使用typeof.


// In Startup.cs

public void ConfigureServices(IServiceCollection services)

{

    services.AddScoped(IUserService, UserServiceA);

    services.AddScoped(IUserService, UserServiceB);

    services.AddScoped(IUserService, UserServiceC);

}


// Any class that uses the service(s)

public class Consumer

{

    private readonly IEnumerable<IUserService> _myServices;


    public Consumer(IEnumerable<IUserService> myServices)

    {

        _myServices = myServices;

    }


    public UserServiceA()

    {

        var userServiceA = _myServices.FirstOrDefault(t => t.GetType() == typeof(UserServiceA));

        userServiceA.DoTheThing();

    }


    public UserServiceB()

    {

        var userServiceB = _myServices.FirstOrDefault(t => t.GetType() == typeof(UserServiceB));

        userServiceB.DoTheThing();

    }


    public UseServiceC()

    {

        var userServiceC = _myServices.FirstOrDefault(t => t.GetType() == typeof(UserServiceC));

        userServiceC.DoTheThing();

    }

}


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 213 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信