4

我有一种情况,即在运行时确定接口的实现。例如,我检查字符串,然后确定要使用的子类,没有IoC的它看起来像下面这样:使用IoC动态选择接口实现

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

两个类AppleImplBananaImpl是实现相同的接口的,说IFruit

这怎么可以使用IoC /依赖注入来完成,尤其是在Castle Windsor

+0

Answer here:http://stackoverflow.com/a/1945023/126014 –

+0

另请参阅:http://stackoverflow.com/a/22705794/126014 –

回答

6

这是关于依赖注入的一个最常问的问题,并且一次又一次地被问到StackOverflow。

简而言之,最好使用模式来解决运行时创建问题,而不是尝试使用容器数量超过composing object graphs, which is all it is designed for

有几种可用于此的模式,但最好的选项之一是使用Abstract Factory,Strategycombination of the two。确切的解决方案取决于实例将如何使用 - 如果您需要几个短暂实例并希望在使用后放弃它们,请使用工厂,或者如果您需要一遍又一遍地使用实例循环,而不必每次重新创建它们。这种组合是高性能和低内存消耗之间的折衷。