使用IoC动态选择接口实现

5

我有这样一个情况,需要在运行时确定接口的实现。例如,我会检查一个字符串,然后决定使用哪个子类,如果没有IoC(控制反转),代码如下所示:

if (fruitStr == "Apple")
{
    new AppleImpl().SomeMethod();
}
else
{
    new BananaImpl().SomeMethod();
}

两个类 AppleImplBananaImpl 都是同一个接口 IFruit 的实现。

Castle Windsor 中,如何使用 IoC/依赖注入来实现这一点?


回答在这里:https://dev59.com/_XI-5IYBdhLWcg3wQV-c#1945023 - Mark Seemann
参见:https://dev59.com/nWEh5IYBdhLWcg3wMA7M#22705794 - Mark Seemann
1个回答

6
这是关于依赖注入最常问的问题,也在StackOverflow上反复提问。
简而言之,最好使用模式来解决运行时创建,而不是试图将容器用于组合对象图,这就是它设计的全部用途

有几种模式可用于此,但其中最好的选择是使用抽象工厂策略两者的组合。确切的解决方案取决于实例将如何使用-如果您需要几个短暂的实例并希望在使用后丢弃它们,请使用工厂;如果您需要在循环中反复使用实例而不必每次重新创建它们,则使用策略。组合是高性能和低内存消耗之间的权衡。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接