代码之家  ›  专栏  ›  技术社区  ›  Mukil Deepthi

如何有条件地解决同一类多个实现的依赖性应用设置.json

  •  0
  • Mukil Deepthi  · 技术社区  · 6 年前

    我在写一个简单的ASP.NET核心webapi。我有 appsetting.json 简单配置如下:

      "Providers": [
        {
          "Class": "Namespace1.Provider1",
          "Assembly": "Namespace1",
        },
        {
          "Class": "Namespace1.Provider2",
          "Assembly": "Namespace1",
        },  
      ]
    

    基本上想知道在使用相同接口的多个实现中使用DI的最佳方式。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Péter Csajtai    6 年前

    最简单的方法是使用命名注册,但不幸的是ASP.NET核心不支持命名注册。因此,如果注册了多个实现,就无法告诉框架在哪些情况下应该选择哪个。

    但是有几个第三方DI集成允许使用这种功能,您可以检查它们 here .

    如果您不想使用它们中的任何一个,那么最好的选择是使用工厂注册,它可以让您选择应该解决的服务,例如:

    services.AddScoped<IService>(p => new Service(new Provider1));
    services.AddScoped<IAnotherService>(p => new AnotherService(new Provider2));
    

    如果您愿意,您可以将选择逻辑移动到appsettings,比如一些类型映射。