【发布时间】:2021-06-17 02:39:16
【问题描述】:
我正在开发一个 net Core WebApi 项目并实现一个工作单元模式来访问数据库中的记录。
考虑下面的类:
工作单元:
public class UnitOfWork : IUnitOfWork
{
public IBooksRepository Books { get; }
public ICatalogueRepository Catalogues { get; }
...
}
API 控制器:
public class StudentController: ApiController
{
private IUnitOfWork _unitOfWork;
public StudentController(IUnitOfWork UnitOfWork)
{
_unitOfWork = UnitOfWork;
}
public IActionResult Get()
{
var books = _unitOfWork.Books.GetAll();
return Ok(books);
}
}
}
目前我正在使用上述方法从数据库中检索记录, 我想像这样访问存储库对象。
var books = _unitOfWork.Set<IBooksRepository>.GetAll();
类似于 EntityFramework DBContext claas 中的Set<T> 方法,目的是使控制器类通用,并以通用的方式执行获取操作。
我怎样才能像Set<T> 方法那样从 UnitOfWork 类中找到存储库对象?
【问题讨论】:
-
那会给你带来什么?
-
根据您编写的原型,我看到的是对 IoC 容器的需求。 IoC 容器能够将接口与适当的实现相匹配。如果做不到这一点,你可以编写一个工厂方法来切换你所有的接口类型和
news 到正确的类。 -
@RobertHarvey 通过这样做,我可以将控制器上的重复代码移动到基类中
-
"类似于 EntityFramework DBContext claas 中的 Set
方法 " -T是Set<T>()的 EFDbContext代表一个实体,你的不是. -
另外,您是否注意到
DbContext的功能看起来像Unit of Work实现?那是因为它是一个。
标签: c# asp.net-core generics entity-framework-core dbcontext