【发布时间】:2022-07-25 18:28:10
【问题描述】:
这让我很烦很长时间。许多 c# 特性都是关于减少代码和冗余的。但是我们有依赖注入。而这个功能需要我们指定我们想要的东西 3 次
public class MyClass
{
private readonly ServiceType _service; // first
public MyClass(ServiceType service) // second
{
_service = service; // third
}
}
现在假设您需要注入 10 个服务。玩得开心滚动。
现在我们已经有了通过公共属性初始化一个类的好模式,我们甚至可以拥有仅初始化属性,所以这种模式变得越来越像构造函数。但据我所知,依赖注入当然不支持这一点......
你知道有什么框架会使用它吗?有什么理由说明它还不是 .NET Core MVC 中的默认 DI 模式?
public class MyClass
{
public ServiceType SomeService {get; set; }
}
var property = new MyClass { SomeService = new ServiceType() };
没那么难。只是需要一点反思。
【问题讨论】:
-
我不明白你的例子。
new MyClass { SomeService = new ServiceType() }不是依赖注入。您只是在问 DI 是否可以使用属性而不是构造函数参数? -
我不认为 .NET 中的默认依赖注入器支持属性注入,但其他 DI 框架可能。它可能仅部分取决于它是否可能,更多地取决于作者是否认为这是要走的路。有些人会争辩说构造函数注入更加强制,因为没有什么可以阻止使用代码来实例化一个对象而不是设置它的属性。
-
属性有一种只是可选的味道,但这些依赖项不是可选的。说您没有强制使用内置的 di 容器。只需使用更适合您的第三方。
-
是的,我在问这个问题或类似问题,我很高兴看到任何将 3 个不必要的参数提及次数减少到 1 个的模式