我有一个返回ISomething
的方法。我正在尝试在整个程序中使用控制反转...但是当涉及到返回值时,我不知道该怎么做-我无法将其传递给方法或构造它的对象,因为该方法应该创建对象。
我看到的唯一解决方案是在构造对象时将ISomething
工厂(Func<ISomething>
)传递给对象。这是通常的/正确的解决方案还是其他建议?
[编辑]很奇怪-没人遇到这个问题吗?我的意思是,没有赞成(甚至反对)的投票...
[编辑]更多详细信息:该方法应该将IExcel导入ITable。下面的共识似乎是,我应该将此方法视为转换器,将IExcel转换为ITable,从而将两者都作为参数而不是返回ITable值。如果再没有新内容出现,我将再保留一天,然后再进行其中一项回复。
最佳答案
您的方法是应该构造ISomething还是将其设置为状态并返回状态已初始化的ISomething? (或者这是否需要一项操作?)
如果您的类具有负责创建ISomething的方法,则它是ISomethingFactory(除非您有混合的关注)。在这种情况下,它具有选择正确的ISomething实现并创建它的逻辑,因此您不必过多担心IoC方面。
但是,如果此类的关注点不是创建适当的ISomething,那么我可能会传入一个工厂。问题是,在大多数情况下,您的DI容器应该能够为您做到这一点(致电工厂以获取适当的ISomething ),因此看到必须创建一个不是工厂的ISomething的方法会让我感到紧张。
在这样的论坛中,尝试提供体系结构指导总是很困难的-但是在有限的输入下,我会说要么您有一个您不知道的工厂,要么是一个工厂。