3

わかりました、多分私は何かを見逃しているか、心配しています...

画像を生成するコントローラーがあります。1 ページに 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

これは、ライフタイム管理を使用して最適化することができます。1 つ以上の依存関係がスレッド セーフである場合、すべての要求に対して新しいインスタンスを作成する理由はありません。代わりに、 100 件のリクエストすべてに対して同じインスタンスを再利用できます。

これはシングルトン ライフタイム スタイルと呼ばれます (シングルトン デザイン パターンと混同しないでください)。

DI コンテナーを使用するか、依存関係を手動で配線する場合は記述しません。そのため、これを行う方法の詳細については、手動で行う方法と構成方法の両方を説明している私の本を参照してください。 6 つの異なる DI コンテナーの寿命。

さらに、次の記事も役に立つかもしれません: http://blog.ploeh.dk/2011/03/04/Composeobjectgraphswithconfidence

于 2014-03-22T21:19:44.070 に答える