如何避免绕过国际奥委会集装箱
本文关键字:奥委会 集装箱 何避免 | 更新日期: 2023-09-27 18:23:43
我有一些遗留代码正在创建类的实例。
我已经设法连接了一个IOC容器来扫描集合并创建它们的实例。然而,我发现在配置中,类特定的类可能会被创建多次。
逻辑基本上在一个类类型数组上循环,如果它与用户选择的类型匹配,则调用CreateInstance
。
这很好,但我认为提供该功能的唯一方法是传递IOC容器并调用Resolve,Resolve将提供该类的新实例。
我知道这很令人反感,但我想不出如何让它发挥作用。
创建一个抽象工厂,在IOC容器和需要新实例的代码之间提供一层抽象,这将避免代码中充斥着依赖容器的调用。
例如,当使用"Unity应用程序块"时,Func<T>
可以用作工厂。该Func<T>
然后隐藏容器实现,该容器实现实际上是container.Resolve<T>()
。
更新
这里有一个例子:
public class TestClass
{
readonly Func<Foo> _fooFactory;
public TestClass(Func<Foo> fooFactory)
{
_fooFactory = fooFactory;
}
public void LoadFoo()
{
var foo = _fooFactory(); // This hides the call container.Resolve<Foo>()
// Do something with foo
}
}