Autofac IComponentContext.Resolve<Type> 是服务定位器模式吗
Is Autofac IComponentContext.Resolve<Type> a service locator pattern
在最近的代码审查中,我通过 IComponentContext 找到了 class 解析器,如下例所示:
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
不应采用 IComponentContext
(以确保不会发生其他服务位置)并且 MyClass1
应采用 IMyClass2
.[=14 类型的构造函数参数=]
在最近的代码审查中,我通过 IComponentContext 找到了 class 解析器,如下例所示:
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
不应采用 IComponentContext
(以确保不会发生其他服务位置)并且 MyClass1
应采用 IMyClass2
.[=14 类型的构造函数参数=]