[英]Is it ok to inject a record in the ASP.NET Core DI container?
记录使我的代码更短。 例如,而不是
public class OrderService
{
private readonly EcommerceContext _context;
public OrderService(EcommerceContext context)
{
_context = context;
}
}
我只有
public record OrderService(EcommerceContext Context)
所以,我的问题是,在 DI 容器中注入一条记录是否可以,或者它有什么缺点吗?
一条记录只是一个带有自动生成的构造函数的 class; DI 容器不区分它们两者。
就我个人而言,我发现记录类型是一种消除实践 DI 和松散耦合所需的基础结构代码/垃圾的好方法。 私有字段、构造函数和私有字段分配只是允许我们的代码松散耦合所需的样板代码。 记录允许将此代码减少到最低限度,这很棒。
记录类型的唯一缺点是,对于 C# 的当前版本,无法防止传入的依赖项成为null
。 对我来说,在大多数情况下这没什么大不了的,在这种情况下我喜欢使用记录类型。 如果 null 检查是强制性的(例如因为您正在编写一个可重用的库,例如您通过 NuGet 发送的东西),您需要回退到使用手动实现的构造函数的老式类。
在撰写有关 DI 的书时,Mark Seemann 和我实际上讨论了使用记录类型作为我们书中构造函数注入的主要演示。 然而,我们决定不在我们的书中使用记录类型,主要出于三个原因:
null
值注入构造函数。也许我们会在本书的(假设的)第三版中改变主意。 当 C# 的未来版本允许记录类型构造函数自动检查(并阻止)null arguments 时,尤其可能会发生这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.