说我有这个:
public class Human : SentientLifeForm, IHuman {
IBreathingService breathingService = null;
public Human(IBreathingService breathingService) {
this.breathingService = breathingService
}
}
public class Martian : SentientLifeForm, IMartian {
IBreathingService breathingService = null;
public Martian(IBreathingService breathingService) {
this.breathingService = breathingService
}
}
然后我有两种不同的BreathingService实现......
public class HumanBreathingService { ... }
public class MartianBreathingService { ... }
如何使用DI将正确的服务实现传递给关联对象?或者我是否必须指定IHumanBreathingService和IMartianBreathingService?
答案 0 :(得分:0)
看起来Autofac - How to create a generated factory with parameters已经回答了这个问题。
Autofac可以创建工厂来创建正确的服务。
答案 1 :(得分:0)
你的问题缺乏特异性,因此我将明确解释我所做的假设。
假设1:SentientLifeForm实现IBreathingService。
假设2:HumanBreathingService和MartianBreathingService实现/派生自IBreathingService。
假设3: HumanBreathingService 将作为参数传递给 Human 的构造函数,而MartianBreathingService将传递给 Martian 的构造函数一个参数。 这是本项目中的DI 。
此后,假设您有一个方法SolarSystemBeing(..),它将SentientLifeForm的实例作为参数。然后根据它获得人类或火星的实例,呼吸服务将是合适的......