c# - 如何将对象构建器注入 MVC 控制器?
问题描述
我正在开发 ASP.NET MVC 项目。为了将视图模型映射到域实体,我决定使用构建器模式。PtoRequest
,UtoRequest
是域的一部分,继承自TimeOffRequest
实现ITimeOffRequest
. 对于他们每个人,我都有一个单独的构建器。每个构建器都实现IRequestBuilder
. 我遇到的问题是如何将这些构建器注入控制器(假设我不必为每种类型的请求注入一个构建器)?
- Pto - 带薪休假
- Uto - 无薪休假
代码:
public class TimeOffManager : Controller
{
private readonly IUnitOfWork _uow;
public TimeOffManager(IUnitOfWork uow)
{
_uow = uow;
}
[HttpPost]
public ActionResult RequestPto(PtoFormVm vm)
{
//validate view model...
ITimeOffRequest pto = new PtoRequestBuilder()
.Id(vm.Id)
.InRange(vm.StartDate, vm.EndDate)
.State((RequestState)vm.State)
.Note(vm.Comment)
.Build();
// Etc...
}
[HttpPost]
public ActionResult RequestUto(UtoFormVm vm)
{
//validate view model...
ITimeOffRequest uto = new UtoRequestBuilder()
.Id(vm.Id)
.IsFullDay(vm.FullDay)
.InRange(vm.StartDate, vm.EndDate)
.State((RequestState)vm.State)
.Note(vm.Comment)
.Build();
// Etc...
}
}
解决方案
像这样?
public class TimeOffManager : Controller
{
private readonly IUnitOfWork _uow;
private readonly IRequestBuilder ptoBuilder;
private readonly IRequestBuilder utoBuilder;
public TimeOffManager(IUnitOfWork uow, IRequestBuilder ptoBuilder, IRequestBuilder utoBuilder)
{
_uow = uow;
this.ptoBuilder = ptoBuilder;
this.utoBuilder = utoBuilder;
}
[HttpPost]
public ActionResult RequestPto(PtoFormVm vm)
{
//validate view model...
ITimeOffRequest pto = ptoBuilder
.Id(vm.Id)
.InRange(vm.StartDate, vm.EndDate)
.State((RequestState)vm.State)
.Note(vm.Comment)
.Build();
// Etc...
}
[HttpPost]
public ActionResult RequestUto(UtoFormVm vm)
{
//validate view model...
ITimeOffRequest uto = utoBuilder()
.Id(vm.Id)
.IsFullDay(vm.FullDay)
.InRange(vm.StartDate, vm.EndDate)
.State((RequestState)vm.State)
.Note(vm.Comment)
.Build();
// Etc...
}
}
除此之外,为什么你有一个实现接口的抽象类?抽象类已经是多态的......
推荐阅读
- java - spring cloud 合约可以处理不同响应的重复请求吗?
- c# - 如何在 .NET Core 中使用 TransactionScope
- swift - iphone 12 / 13 mini 模拟器中的尺寸不正确
- php - 类别的递归数组和子类别 PHP
- node.js - TypeScript:在此示例中预期类型错误。而没有得到他们。我错过了什么吗?还是只是丢了??:)
- reactjs - 传递给孩子的参考是空的
- python - IndentationError:期望在 requests.adapter 中有一个缩进块
- python - 为什么在 Pandas 中转换为日期时间时日期格式会有所不同?
- python - %config InlineBackend.figure_format = 'retina' 如何将此行从 .ipynb 文件正确转换为 .py 脚本文件?
- c++ - 如何将 OpenCV cv::Mat 转换为 Void 指针?