![]() |
1
12
依赖 有一个公认的“拥有者”来决定何时应该处置资源。 如果A和B需要引用C的同一个实例,那么它们中只有一个应该充当“所有者”。
可以
做一些相当于引用计数的事情,我通常发现最好只是记录谁“拥有”了什么。例如,创建
|
![]() |
2
4
做一个空检查不会有帮助,就像B处理C一样,这不会更新a的引用。
一般来说,创建C的类应该是处理它的类。 |
![]() |
3
1
只有一个实例必须是所有者,它负责处理。非所有者实例应该使用像Attach这样的函数获取C引用,并且不应该处理它。 |
![]() |
4
1
是的,集装箱里有
有时,DI框架为您提供了一种获得所有权的方法。例如,在Autofac中,您可以请求
|
![]() |
5
1
谁 创建 很可能有一个“outer”类创建了C,然后直接或间接地将其传递给A和B。这可能是负责C的生命周期的自然候选者,应该处理它。 [编辑:回应OP的评论] 听起来你应该再看看这里的设计。这是否意味着需要重构? 你有一个C类需要处理,这是由a和B使用;您是否应该让一个类全权负责通过a和B编组C,而不是让它们自己从DI容器创建C?或者说C更像是一个单子。它真的需要处理吗? 我想我想说的是,这感觉可能指向一个设计,需要一点改变;用挑剔的眼光再看一眼。 |
![]() |
6
0
我认为有两种方法:
|
![]() |
7
0
我还想问,在现实世界的例子中,你在哪里会看到这种情况,可能是设计上的差异。 更新: |
![]() |
8
0
|
![]() |
9
0
除了乔恩所说的-创造者是主人,应该处理一次性的。 不是每个组件都支持这一点(或者至少不是每个组件都完全支持)。 Castle Windsor does . Autofac也支持它。 |
![]() |
10
0
每
|
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |