当您在容器中有多个实现时,如何让Castle Windsor在运行时选择正确的接口植入.
例如,假设我有一个名为IExamCalc的简单界面,它可以计算出某人在该考试中的表现.
不,我们有几个像这样的实现,例如,
public interface IExamCalc
{
int CalculateMark(ExamAnswers examAnswers)
}
public class WritenExam : IExamCalc
{
public int CalculateMark(ExamAnswers examAnswers)
{
return 4;
}
}
public class OralExam : IExamCalc
{
public int CalculateMark(ExamAnswers examAnswers)
{
return 8;
}
}
public class ExamMarkService
{
private IExamCalc _examCalc;
public ExamMarkService(IExamCalc examCalc)
{
_examCalc = examCalc;
}
public int[] CalculateExamMarks(ExamAnswers[] examAnswers)
{
IList<int> marks = new List<int>;
foreach(ExamAnswers examanswer in examaAnswers)
{
marks.Add(_examCalc.CalculateMark);
}
}
}
Run Code Online (Sandbox Code Playgroud)
假设通过Windor恢复了ExamMarkService如何确保在构造函数中注入正确的实现,这是多租户问题的一个例子吗?
希望一切都有所作为
科林G.
我想配置Windsor容器,以便单个单例样式的实例可以通过容器提供两个或更多服务.
我发现在多个组件声明(基于XML的配置)中使用相同的类型将导致创建该类型的实例以提供每个组件的服务接口,这不是我想要的行为.
例如:
interface IA { }
interface IB { }
class AB : IA, IB { ... }
Run Code Online (Sandbox Code Playgroud)
我希望AB的一个实例提供IA和IB服务.
我想要这样做的具体原因是我的具体DAO实现扩展了多个接口.另一方面,我有几个工作组件,它们包含对不同接口的引用.具体的DAO实例尊重这一点,但是这些单独的工作组件的构造函数需要实现它们的单独接口,并且我希望Castle.Windsor通过相应的服务请求将相同的对象实例传递给这些工作容器.
大声笑,我认为这很明显是泥!:P
有没有人明白我的意思,有没有人有任何想法如何通过组件的XML配置实现这一点?