我有一个具有存储库层、DTO 服务层和 WebAPI 层的 webAPI 应用程序。WebAPI 调用 DTO 调用存储库。
我的存储库是这样开始的:
public class RepositoryService : IRepositoryService
{
private readonly DbContext _db;
public RepositoryService(string connectionString)
{
_db = new DbContext(connectionString);
}
public RepositoryService()
{
_db = new DbContext();
}
我的 DTO 服务是这样开始的:
public class DtoService : IDtoService
{
private readonly RepositoryService _repository;
public DtoService(string connectionString)
{
_repository = new RepositoryService(connectionString);
}
public DtoService()
{
_repository = new RepositoryService();
}
我的 DbContext 看起来像这样:
public DbContext() : base("name=TestConnection")
{
}
public DbContext(string connectionString) : base(connectionString)
{
}
到目前为止,这使我可以选择定义一个连接字符串,以便在运行应用程序进行测试时使用。
第一个问题: 这种方法看起来可以吗?
现在我已经到了我的 WebAPI 层,我不只是有一个控制器类。我有一堆不同的控制器。我正在考虑为每个控制器执行和实现这些构造函数,但必须有更好的方法来做到这一点。有些东西告诉我这是依赖注入发挥作用的地方,但我不确定。
我可以做这样的事情:
- 为每个控制器创建构造函数,就像我为上面的服务一样
在我的测试中,新建每个控制器的实例,例如
var accountController = new AccountController(connectionStringForTesting)
但我知道这不切实际,所以...
第二个问题:实用的方法是什么样的?