【发布时间】:2017-08-23 01:55:21
【问题描述】:
使用 IoC 可解析接口来指定 DTO 有什么价值?
举例:
private readonly IGetTransactionsQuery _query;
private readonly ICreateTransactionCommand _createCommand;
public TransactionsController(
IGetTransactionsQuery query,
ICreateTransactionCommand createCommand)
{
_query = query;
_createCommand = createCommand;
}
[EnableQuery]
public IQueryable<ITransactionQueryModel> Get()
{
return _query.Execute();
}
public async Task<IHttpActionResult> Post(ICreateTransactionModel transaction)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
await _createCommand.Execute(transaction);
return Created(transaction);
}
在这里,我使用的是 ITransactionQueryModel 和 ICreateTransactionModel,而不是混凝土。这里有商业价值吗?哪些场景可以从这种方法中受益?我能想到一些,但想就用例场景
达成一些共识注意:我只指控制器的“动作”方法,而不是构造函数,拥有 IoC 的好处是显而易见的
【问题讨论】:
-
您从中获得的一项直接好处的可测试性。在这种情况下,松散耦合和依赖注入主题值得一读。
-
那么,您实际上要问的是:the advantage of Dependency Injection 和 Dependency Inversion 是什么。
-
@Steven,如果我问在一英亩的岛上拥有汽车有什么好处,我并不是在问拥有汽车的好处。这不是一个新手问题,但感谢谷歌搜索链接..以防我忘记如何使用它
-
啊,好吧,我想我明白你在问什么(标题很混乱)。为数据对象创建抽象通常没有任何价值。抽象旨在隐藏行为,但数据对象(例如 DTO)没有任何行为,因此为它们创建抽象通常没有用,尤其是当只有一个实现时。
-
@Steven 请在答案中发布此回复,我会将其标记为“已接受”另外,为了清楚起见,请随时编辑标题
标签: c# asp.net-web-api dependency-injection