相关疑难解决方法(0)

依赖注入和IDisposable

我对使用Autofac的实现中的Dispose()方法有点困惑IDisposable

说我的对象有一定的深度:

  • Controller取决于IManager;
  • Manager取决于IRepository;
  • Repository取决于ISession;
  • ISessionIDisposable.

这导致以下对象图:

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

12
推荐指数
1
解决办法
2734
查看次数

什么是"高级模块"和"低级模块"(在依赖性倒置原则的背景下)?

我正在阅读维基百科对依赖性倒置原则的定义,它使用两个术语高级模块低级模块,我无法弄清楚.

他们是什么,依赖倒置原则与他们有什么关系

language-agnostic dependencies module inversion-of-control dependency-inversion

8
推荐指数
1
解决办法
2903
查看次数

依赖倒置原则[DIP]中的“抽象不应依赖于细节。细节应依赖于抽象”是什么意思?

在问这个问题之前我想说的问题与我的问题非常相似,但概念仍然不清楚,非常令人困惑。

\n\n

我试图理解依赖倒置原理,但我无法完全理解它?

\n\n

下面是DIP说的两点

\n\n
\n

A. 高层模块不应该依赖于低层模块。两者都应该依赖于抽象。B. 抽象不应依赖于细节。细节应该取决于抽象。

\n
\n\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

如果有人给我一个代码示例,那将非常有用。

\n

oop inversion-of-control design-principles solid-principles dependency-inversion

3
推荐指数
2
解决办法
3557
查看次数