在最近的一次代码检查中,我通过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。这不是一个服务定位模式和Voilating IOC吗?

最佳答案

是的,这是使用服务定位器模式的示例。要修复它,您的BaseClass应该采用noIComponentContext(以确保不会发生其他服务位置),MyClass1应该采用IMyClass2类型的构造函数参数。

08-03 16:45