使用IoC动态选择接口实现

本文关键字:接口 实现 选择 动态 IoC 使用 | 更新日期: 2023-09-27 18:29:13

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

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

AppleImplBananaImpl都是同一接口的实现,比如IFruit

如何使用IoC/Dependency Injection实现这一点,尤其是在Castle Windsor中?

使用IoC动态选择接口实现

这是关于依赖注入的一个问题,在StackOverflow上被问了一遍又一遍。

简而言之,最好使用模式来解决运行时创建问题,而不是试图使用容器来构建对象图,这就是它的全部设计目的。

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