执行以下操作的正确方法是什么,以便ParentClass
不依赖于MyClass
?
public class ParentClass
{
public void MyFunction(IList<Foo> foos)
{
foreach (var bar in foos)
{
var myClass = new MyClass();
myClass.DoStuff();
}
}
}
通常没有循环我只是用ParentClass构造函数注入它,但是在这里我需要为循环的每次迭代都有一个新的实例。
或许还有一种更好的办法来完成我想要实现的目标?也许myClass可以在每次迭代结束时重置自己,以便我可以重用它?
答案 0 :(得分:7)
您可以将创建MyClass实例的工厂对象注入ParentClass。
对于每个循环迭代,您调用工厂对象,以便为您提供MyClass的新实例。
答案 1 :(得分:1)
您可以在构造函数中注入Func<IMyClass>
,然后根据需要多次调用它来获取不同的实例。
答案 2 :(得分:0)
这实际上取决于你想用MyClass做什么。就目前而言,foo,bar和MyClass之间没有相关性。假设您要将条形码注入MyClass的Ctor,或将其作为参数传递给DoStuff,那么我只需将一个工厂类或方法注入ParentClass Ctor并使用它来代替新建的MyClass。
答案 3 :(得分:0)
您提出的注射具有可读性,易于理解且易于验证的正确性。
如果循环很大或创建MyClass
代价很高(例如,它打开连接,文件句柄,子进程或启动线程),则重置对象是一个选项。
由于reset()
解决方案需要更多的时间和精力来验证每次代码更改,因此我建议在打扰之前实际测量这是一个瓶颈。