我们是否可以解析使用.NETCore3中使用Lamar的接口的其他实现的接口实现?

我们是否可以解析使用.NETCore3中使用Lamar的接口的其他实现的接口实现?,.net,asp.net-core,dependency-injection,structuremap,lamar,.net,Asp.net Core,Dependency Injection,Structuremap,Lamar,我正在使用.NETCore3.0,有以下几个类 public class DataProviderA: IDataProvider { } public class DataProviderB: IDataProvider { } public class DataProviderCombined: IDataProvider { public DataProviderCombined(IDataProvider providerA, IDataProvider provider

我正在使用.NETCore3.0,有以下几个类

public class DataProviderA: IDataProvider { }
public class DataProviderB: IDataProvider { }

public class DataProviderCombined: IDataProvider { 
      public DataProviderCombined(IDataProvider providerA, IDataProvider providerB) { ... }
}
在my Startup.cs中,我已将服务注册为以下内容:

services.AddTransient<IDataProvider, DataProviderCombined>();

services.ForConcreteType<DataProviderCombined>().Configure.Scoped()
        .Ctor<IDataProvider>("providerA").Is<DataProviderA>().Transient()
        .Ctor<IDataProvider>("providerb").Is<DataProviderB>().Transient();
public class DataController {
   public DataController(IDataProvider combinedDataProvider) { ... }
}
services.AddTransient();
services.ForConcreteType().Configure.Scoped()
.Ctor(“providerA”).Is().Transient()
.Ctor(“providerb”).Is().Transient();
这似乎无法正确解决,因为我遇到以下错误:

Lamar.IoC.LamarException:无法生成已注册实例 “IDataProvider”的数据提供程序:检测到双向依赖项:


在Lamar中是否有我在.NET Core 3中无法做到这一点的注册信息?

我误解了services.ForConcreteType以及如何使用它,并且没有正确使用它

所以在上面,DataProviderCombined将用于控制器中,但通过使用IDataProvider的构造函数注入。因为注册是通过实现完成的,而不是通过接口完成的,所以它永远不会起作用

最后,完成了以下工作:

services.For<IDataProvider>().Add<DataProviderA>().Named("DA");
services.For<IDataProvider>().Add<DataProviderB>().Named("DB");

services.For<IDataProvider>().Add<CombinedDataProvider>()
            .Ctor<IDataProvider>("daProvider").Is<DataProviderA>()
            .Ctor<IDataProvider>("dbProvider").Is<DataProviderB>()
            .Named("Combined");

services.ForConcreteType<DataController>().Configure
            .Scoped()
            .Ctor<IDataProvider>("combinedDataProvider")
            .IsNamedInstance("Combined");