Unity容器:构造函数与属性与方法注入之间的差异

问题描述 投票:0回答:1

这特定于Unity DI。

似乎有一种常识表明,如果您的大多数班级都需要一定的依赖关系,则应使用构造函数注入。如果仅在该类用例的子集中需要依赖项,则应使用属性注入(或可能的方法注入)。我认为这是因为后两个在引用之前不会解析对象,但是以我的经验,这三个都解决了对象创建的依赖关系,那么在一个对象上使用另一个对象有什么用?

此外,the Unity documentation on deferring object creation仅提及Lazy <>和Func <>泛型。

  1. 有没有一种方法可以设置属性和/或方法注入以延迟解析?
  2. 如果没有,是否有其他方法仅允许风格偏好?
c# dependency-injection unity-container
1个回答
0
投票

好吧,从根本上推迟使用属性的分辨率是一种不好的做法。某些DI容器(Microsoft.Extensions。* https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.1)甚至不允许您这样做。

如果您的代码遵循SOLID原则(https://en.wikipedia.org/wiki/SOLID),几乎不会发生降低分辨率的需求。相反,您应该将您的类分成较小的部分,每个类都将通过其构造函数注入。如果仍然需要延迟分辨率(例如,在创建外观时),则可以注入抽象工厂并调用其工厂方法以在需要时实例化实例。

© www.soinside.com 2019 - 2024. All rights reserved.