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

.NET核心-注册服务,如何注册服务的单独版本

  •  0
  • eddyP23  · 技术社区  · 7 年前

    我有一个接口 IService 和两个实现 ServiceA 和 ServiceB .

    A B . 有没有办法做到这一点?它应该是这样的:

    services.AddScoped<IService, ServiceA>();
    
    services.AddScoped<ISomethingElse, SomethingElse>();
    services.WhenResolving<ISomethingElse>.AddScoped<IService, ServiceB>();
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Derviş Kayımbaşıoğlu    7 年前

    首先,假设您有配置参数,并根据您的配置参数决定哪个服务将由您的接口解析

    services.AddScoped<ISomethingElseService, SomethingService>();
    
    if (Configuration["MyServiceParam"] == "X")
        services.AddScoped<ISomethingService, SomethingElseService>();
    

    另一个选择是

    services.AddScoped<ISomethingService>(s => {
       var MyServiceA = s.GetService<MyServiceA>();
       if (MyServiceA is null)
          return new SomethingElseService();
       else
          return new SomethingService(MyServiceA);
    });
    
    推荐文章