使用IoC动态选择接口实现
我有一种情况,在运行时确定接口的实现。 例如,我检查一个字符串,然后确定要使用哪个子类,如果没有IoC,它看起来如下所示:
if (fruitStr == "Apple") { new AppleImpl().SomeMethod(); } else { new BananaImpl().SomeMethod(); }
AppleImpl
BananaImpl
说, AppleImpl
和BananaImpl
这两个类都是同一个界面的IFruit
。
如何使用IoC / Dependency Injection来完成,特别是在Castle Windsor ?
这是关于dependency injection的最常见问题,并在StackOverflow上反复询问。
简而言之,最好使用模式来解决运行时创建问题,而不是尝试使用容器来构建对象图 ,而不仅仅是组合对象图 。
有几种模式可用于此,但最好的选择是使用抽象工厂 , 策略或两者的组合 。 确切的解决方案取决于实例的使用方式 – 如果您需要几个短期实例并希望在使用后丢弃它们,请使用工厂,或者如果您需要在一个实例中反复使用实例,请使用策略循环而不必每次都重新创建它们。 这种组合是高性能和低内存消耗之间的权衡。
- 如何模拟Application.Current进行unit testing?
- Google Open Auth 2.0在服务器端获得access_token(错误请求错误,ProtocolError)
- 将数据从子窗口传递到MainWindow TextBlock
- 无论关系中是否存在正确的Inverse(流畅的nhibernate)设置,NHibernate都会发出无关的更新语句
- 发布的Azure Web角色中的CSS图标生成内容出现问题
- 如何使用触发器将事件参数传递给命令?
- 如何在HtmlAgilityPack中逐个获取元素
- DataGridView动态更改数据源
- 如何判断用户是否正在访问“/Default.aspx”或只是“/”