gpt4 book ai didi

c# - 使用 CommonServiceLocator 将依赖项注入(inject)基类是一种好习惯吗?

转载 作者:行者123 更新时间:2023-11-30 21:15:28 25 4
gpt4 key购买 nike

目前当我需要向基类中注入(inject)依赖时,我使用下面的代码:

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 将依赖项注入(inject)基类:

public class BaseClass
{
readonly IService _service;
public BaseClass()
{
_service = ServiceLocator.Current.GetInstance<IService>();
}
}

public class A : BaseClass
{
}

public class B : BaseClass
{
}

这看起来简单多了,但我不确定这是否是一个好的做法。

谢谢

最佳答案

从类中请求依赖称为 Service Locator Pattern ,这是一个 anti-pattern .防止最小化您的应用程序和 IoC 框架之间的依赖性,即使它是 Common Service Locator。

我仍然会选择第一种方法,但我同意如果基类总是需要这种依赖并且您有很多子类型,那么这会变得很麻烦。在这种情况下,进行属性注入(inject):

public class BaseClass
{
public BaseClass()
{
}

public IService Service { get; set; }
}

这样您的图书馆就不用使用服务定位器了。对我来说,这种方法的最大优势之一是它使编写单元测试变得不那么痛苦。

关于c# - 使用 CommonServiceLocator 将依赖项注入(inject)基类是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com