Autofac IComponentContext.Resolve <type>是服务定位器模式吗?

时间:2018-12-12 09:10:39

标签: c# dependency-injection inversion-of-control autofac

在最近的代码回顾中,我通过IComponentContext找到了类解析器,如以下示例所示:

using Autofac;

public class BaseClass
{
    protected IComponentContext _componentContext;
    public BaseClass(IComponentContext componentContext)
    {
        _componentContext = componentContext;
    }
}

public class MyClass1: BaseClass
{
   protected IMyClass2 _myClass2 = _componentContext.Resolve<MyClass2>();
   public void Operation1()
   {
        _myClass2.Operation2();
   }
}

我觉得上面的代码正在解决Class1()构造函数之外的MyClass2。这不是服务定位器模式并破坏IOC吗?

1 个答案:

答案 0 :(得分:5)

是的,这是一个使用服务定位器模式的示例。要对其进行修复,您的BaseClass应该不使用IComponentContext(以确保没有其他服务位置发生),并且MyClass1应该采用类型为IMyClass2的构造函数参数。