我对使用Autofac的实现中的Dispose()方法有点困惑IDisposable
说我的对象有一定的深度:
Controller取决于IManager;Manager取决于IRepository;Repository取决于ISession;ISession是IDisposable.这导致以下对象图:
new Controller(
new Manager(
new Repository(
new Session())));
Run Code Online (Sandbox Code Playgroud)
我是否还需要使我的Manager和Repository实现IDisposable,并在Controller中调用Manager.Dispose(),在Manager中调用Repository.Dispose()等,或者Autofac会自动知道我的调用堆栈中哪些对象需要正确处理?Controller对象已经是IDisposable,因为它派生自基本ASP.NET Web API控制器
.net dependency-injection idisposable inversion-of-control autofac
我正在阅读维基百科对依赖性倒置原则的定义,它使用两个术语高级模块和低级模块,我无法弄清楚.
他们是什么,依赖倒置原则与他们有什么关系?
language-agnostic dependencies module inversion-of-control dependency-inversion
在问这个问题之前我想说的是问题与我的问题非常相似,但概念仍然不清楚,非常令人困惑。
\n\n我试图理解依赖倒置原理,但我无法完全理解它?
\n\n下面是DIP说的两点
\n\n\n\n\nA. 高层模块不应该依赖于低层模块。两者都应该依赖于抽象。B. 抽象不应依赖于细节。细节应该取决于抽象。
\n
我能够理解第一点,但无法理解第二点,看起来两者是相同的。在 stackoverflow 和其他网站进行大量搜索后,我可以理解两者都试图说不同的事情,但我无法理解。
\n\n让\xe2\x80\x99s 考虑一个例子:
\n\n让\xe2\x80\x99s考虑SalaryCalculator类[高级模块],它用于计算员工的工资。其中使用BonusCalculator [高级模块]来计算工资,如下所示。由于 SalaryCalculator 使用 BonusCalculator,它\xe2\x80\x99s 违反了\xe2\x80\x9c 的第一点,高级模块不应依赖于低级模块。两者都应该依赖于抽象\xe2\x80\x9d。
\n\n\n\n因此我们在两者之间引入了抽象,如下所示:
\n\n\n\n这里的细节[低级和高级模块]依赖于抽象,而抽象不依赖于细节。那么在 DIP 中,第二点试图说明什么?\n 如果两者相同,为什么将其分为两点?
\n\n如果有人给我一个代码示例,那将非常有用。
\noop inversion-of-control design-principles solid-principles dependency-inversion