我们是否可以解析使用.NETCore3中使用Lamar的接口的其他实现的接口实现?
我正在使用.NETCore3.0,有以下几个类我们是否可以解析使用.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
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");