3

好吧,也许我错过了什么或非常担心......

我有一个控制器来生成我的图像。在一个页面上,它可能有 100 个或更多图像。对于生成的每个图像,都会调用 ImagingController。我使用依赖注入并注意到对于显示的每个图像,都构造了依赖类。

src="@Url.Action("Thumbnail", "Imaging")/id"

private readonly IDBAccess _dbaccess;
private readonly ILogger _logger;
private readonly ISettings _settings;
private readonly IStateManager _statemanager;

    public ImagingController(IDBAccess dbaccess, ILogger logger, ISettings settings, IStateManager statemanager)
    {
        this._dbaccess = dbaccess;
        this._logger = logger;
        this._settings = settings;
        this._statemanager = statemanager;
    }

    public ActionResult Thumbnail(int id)
    {
        ...
        return File((byte[])data, "image/jpeg");
    }

因此,上述 4 个依赖类中的每一个都被构造了 100 次。这似乎有点太多开销还是我错了?

4

1 回答 1

2

可以使用生命周期管理来优化这一点。如果一个或多个依赖项是线程安全的,则没有理由为每个请求创建一个新实例。相反,您可以为所有 100 个请求重用同一个实例。

这称为Singleton 生命周期样式(不要与 Singleton 设计模式混淆)。

如果您使用 DI 容器,或者手动连接依赖项,则无需编写,因此有关如何执行此操作的详细信息,我将向您推荐我的书,这本书都解释了如何手动执行,以及如何配置6 个不同 DI 容器的寿命。

此外,您可能还会发现这篇文章很有用:http: //blog.ploeh.dk/2011/03/04/Composeobjectgraphswithconfidence

于 2014-03-22T21:19:44.070 回答