依赖注入被称为太多次?

时间:2013-09-17 09:15:33

标签: asp.net-mvc-3 dependency-injection

好吧,也许我错过了什么或担心得多......

我有一个控制器可以生成我的图像。在页面上它可能有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次。这似乎有点太多开销或我错了吗?

1 个答案:

答案 0 :(得分:2)

可以使用终身管理对其进行优化。如果一个或多个依赖项是线程安全的,则没有理由为每个请求创建新实例。相反,您可以重复使用所有100个请求的相同实例。

这称为单身生活方式(不要与Singleton设计模式混淆)。

如果你使用DI容器,或者手动连接依赖关系,你不会写,所以有关如何执行此操作的详细信息,我将引用您my book,它们都解释了如何执行此操作手动,以及如何为6个不同的DI容器配置寿命。

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