gpt4 book ai didi

c# - 在哪里构建一次性依赖项以提高可测试性?

转载 作者:行者123 更新时间:2023-11-30 18:40:09 25 4
gpt4 key购买 nike

在我的单元测试中,我使用类似 AssemblyInitialize 的东西, ClassInitializeTestInitialize配置我的测试。在 AssemblyInitialize我初始化了一些单例工厂来创建服务、工作单元和存储库(全部通过 Unity/Dependency Injection)。在我的 TestInitialize我清除了他们必须确保每个测试都能独立运行的状态。

通过 Stackoverflow,我找到了以下文章:Writing Testable CodeHow to Think About the “new” Operator with Respect to Unit Testing .我不得不说,他们改变了我对我编写的一些代码的看法,但我的头脑仍然在嗡嗡作响。

例如,拿下面的代码:

public class MyPresenter : BasePresenter<IMyView>
{
public MyPresenter(IMyView view)
: base(view)
{
}

public void PrepareView()
{
using (IMyService service = ServiceFactory.Instance.CreateService<IMyService>())
{
View.Data = service.GetData();
}
}
}

它在像这样的 aspx 页面中使用:

Presenter = new MyPresenter(this);
if (!IsPostback)
{
presenter.PrepareView();
}

结合前面的文章,我应该如何改变这种类型?我应该将服务实例传递给 PrepareView 方法吗?但是我的 ASPX 页面必须了解服务和工厂等信息,并在使用后处理服务。

我应该如何处理我的 Singleton 工厂?使其成为类的属性并通过 Unity 注入(inject)?

最佳答案

我发现这种解决依赖关系的方式不够优雅,看看 Ninject 连接依赖关系或注入(inject)它们的方式。

你可以看到区别,Service Locator 是一个反模式,读这个blog也更加明确了.NET依赖注入(inject)的本质目的和实践

关于c# - 在哪里构建一次性依赖项以提高可测试性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678585/

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