1

インターフェイスを取得しましたIUnitOfWork(その実装はお見せしません):

public interface IUnitOfWork : IDisposable
{
    ...
}

IDisposable継承に注意してください。また、適切な実装でサービスを取得しました。

public interface IBusinessLogicService
{
    ...
}

public sealed class BusinessLogicService : IBusinessLogicService
{
    // Dependency is auto-injected by ninject
    // because of the custom injection heuristic.
    public IUnitOfWork UnitOfWork { get; set; }

    ...
}

ninject バインディングに進みます。

kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
kernel.Bind<IBusinessLogicService>().To<BusinessLogicService>();

ご覧のとおり、ninject はIUnitOfWorkリクエストの最後にインスタンスを自動的に非アクティブ化し、破棄します。

さて、問題
は、ninject は、非アクティブ化オブジェクトに依存するインスタンス ( など)も非アクティブ化(および次の Web 要求で再アクティブ化) するのでしょうか?IBusinessLogicService

4

2 に答える 2

1

いいえ、Ninject は、スコープがある場合、スコープが収集されたときにオブジェクトを非アクティブ化します。一時的なオブジェクトは Ninject によって追跡されず、外部で管理されていると見なされます [そして、必要に応じて新しいインスタンスが作成されます]。

オブジェクトのスコープに相当する非アクティブ化ポイントは、通常、スコープ オブジェクトがいつガベージ コレクションされるかによって決定されます

InRequestScopeアクティブ化は、ASP.NET パイプライン フックを使用して、要求の最後に確定的に行われます。

Ninject.Extensions.NamedScopeこのスペースのその他のオプションについても参照してください

于 2013-02-01T08:52:51.353 に答える
0

Ninject は、依存性注入のみを担当します。カーネルバインディングに応じて、クラスインスタンスでインターフェイス変数をインスタンス化します。Ninject を使用して作成されたインスタンスの非アクティブ化については責任を負いません。オブジェクトの非アクティブ化は、通常の asp.net フレームワークのオブジェクト破棄サイクルに従います。

于 2013-02-01T09:01:16.273 に答える