目前,当我需要将依赖项注入基类时,我使用以下代码:
public class BaseClass
{
readonly IService _service;
public BaseClass(IService service)
{
_service = service;
}
}
public class A : BaseClass
{
public A(IService service) : base(service)
{
}
}
public class B : BaseClass
{
public B(IService service) : base(service)
{
}
}
我必须在所有子类中编写很多重复的代码。为了避免这些重复的代码,我想我可以使用CommonServiceLocator将依赖项注入基类:
public class BaseClass
{
readonly IService _service;
public BaseClass()
{
_service = ServiceLocator.Current.GetInstance<IService>();
}
}
public class A : BaseClass
{
}
public class B : BaseClass
{
}
这似乎更简单,但我不确定这是不是一个好习惯。
由于
答案 0 :(得分:4)
从类中请求依赖项称为Service Locator Pattern,它是anti-pattern。防止最小化应用程序与IoC框架之间的依赖关系,即使它是公共服务定位器。
我仍然会选择第一种方法,但我同意如果基类总是需要这种依赖,并且你有很多子类型,这可能会变得很麻烦。在这种情况下,请注册房产:
public class BaseClass
{
public BaseClass()
{
}
public IService Service { get; set; }
}
这样您的图书馆就可以免费使用服务定位器。对我来说,这种方法的最大优点之一是它使编写单元测试的痛苦更小。