我有一个控制器可以生成我的图像。在页面上它可能有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次。这似乎有点太多开销或我错了吗?
答案 0 :(得分:2)
可以使用终身管理对其进行优化。如果一个或多个依赖项是线程安全的,则没有理由为每个请求创建新实例。相反,您可以重复使用所有100个请求的相同实例。
这称为单身生活方式(不要与Singleton设计模式混淆)。
如果你使用DI容器,或者手动连接依赖关系,你不会写,所以有关如何执行此操作的详细信息,我将引用您my book,它们都解释了如何执行此操作手动,以及如何为6个不同的DI容器配置寿命。
此外,您可能还会发现本文很有用:http://blog.ploeh.dk/2011/03/04/Composeobjectgraphswithconfidence