Auf der Suche nach einem Ninject-Bereich, der sich wie InRequestScope verhält

Auf meiner Serviceschicht habe ich einen gespritztUnitOfWork und 2 Repositories im Konstruktor. Die Arbeitseinheit und das Repository haben eine Instanz von aDbContext Ich möchte zwischen den beiden teilen. Wie kann ich das mit Ninject machen? Welcher Umfang sollte berücksichtigt werden?

ich binnicht in einer Webanwendung also kann ich nicht verwendenInRequestScope.

Ich versuche etwas ähnliches zu tun ... und ich benutze DI, aber ich brauche meine UOW zu seinDisposed und so erstellt.

using (IUnitOfWork uow = new UnitOfWorkFactory.Create())
{
    _testARepository.Insert(a);
    _testBRepository.Insert(b);

    uow.SaveChanges();
}

EDIT: Ich möchte nur sichergehen, dass ich es verstehe ... nachdem ich es mir angesehen habehttps://github.com/ninject/ninject.extensions.namedscope/wiki/InNamedScope Ich denke über meine aktuelle Konsolenanwendungsarchitektur nach, die tatsächlich Ninject verwendet.

Sagen wir :

Klasse A ist eine Service-Layer-Klasse

Klasse B ist eine Arbeitseinheit, die eine Schnittstelle parametrisiert (IContextFactory)

Klasse C ist ein Repository, das eine Schnittstelle als Parameter verwendet (IContextFactory)

Die Idee hier ist, Kontextoperationen für zwei oder mehr Repositorys ausführen zu können und die Arbeitseinheit zu verwenden, um die Änderungen anzuwenden.

Klasse D ist eine Kontextfactory (Entity Framework), die eine Instanz (in einem Container aufbewahren) des Kontexts bereitstellt, die von Klasse B und C gemeinsam genutzt wird (.. und auch für andere Repositorys gelten würde).

Die Kontext-Factory behält die Instanz in ihrem Container, sodass ich nicht den gesamten Namen dieser Instanz wiederverwenden möchte, da der Kontext am Ende des Dienstvorgangs entsorgt werden muss. Ist dies der eigentliche Hauptzweck von InNamedScope?

Die Lösung wäre, aber ich bin mir nicht sicher, ob ich es richtig mache. Die Serviceinstanz wird vergänglich sein, was bedeutet, dass sie tatsächlich nie entsorgt hat. :

Bind<IScsContextFactory>()
    .To<ScsContextFactory>()
    .InNamedScope("ServiceScope")
    .WithConstructorArgument(
         "connectionString", 
         ConfigurationUtility.GetConnectionString());

Bind<IUnitOfWork>().To<ScsUnitOfWork>();

Bind<IAccountRepository>().To<AccountRepository>();
Bind<IBlockedIpRepository>().To<BlockedIpRepository>();

Bind<IAccountService>().To<AccountService>().DefinesNamedScope("ServiceScope");
Bind<IBlockedIpService>().To<BlockedIpService>().DefinesNamedScope("ServiceScope");

Antworten auf die Frage(2)

Ihre Antwort auf die Frage