如何避免绕过国际奥委会集装箱

本文关键字:奥委会 集装箱 何避免 | 更新日期: 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
    }
}