C# 用IoC动态选择接口实现

C# 用IoC动态选择接口实现,c#,dependency-injection,inversion-of-control,castle-windsor,ioc-container,C#,Dependency Injection,Inversion Of Control,Castle Windsor,Ioc Container,我遇到的情况是,接口的实现是在运行时确定的。例如,我检查一个字符串,然后确定要使用哪个子类,如果没有IoC,它看起来如下所示: if (fruitStr == "Apple") { new AppleImpl().SomeMethod(); } else { new BananaImpl().SomeMethod(); } 两个类AppleImpl和BananaImpl都是相同接口的实现,比如IFruit 如何使用IoC/依赖注入来实现这一点,特别是在Castle Windso

我遇到的情况是,接口的实现是在运行时确定的。例如,我检查一个字符串,然后确定要使用哪个子类,如果没有IoC,它看起来如下所示:

if (fruitStr == "Apple")
{
    new AppleImpl().SomeMethod();
}
else
{
    new BananaImpl().SomeMethod();
}
两个类
AppleImpl
BananaImpl
都是相同接口的实现,比如
IFruit


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

这是关于依赖注入的一个最常被问到的问题,在StackOverflow上会被反复问到

简言之,最好使用模式来解决运行时创建问题,而不是尝试将容器用于超过个月的时间

有几种模式可用于此目的,但最好的选择是使用,或者使用。确切的解决方案取决于实例的使用方式——如果需要几个短期实例并希望在使用后丢弃它们,请使用工厂;如果需要在循环中反复使用实例而无需每次重新创建实例,请使用策略。这种组合是高性能和低内存消耗之间的折衷。

回答:另请参见: