Szukam zakresu Ninject, który zachowuje się jak InRequestScope

Na mojej warstwie serwisowej wstrzyknąłemUnitOfWork i 2 repozytoria w konstruktorze. Jednostka pracy i repozytorium mają instancję aDbContext Chcę się podzielić między nimi dwoma. Jak mogę to zrobić za pomocą Ninject? Jaki zakres należy rozważyć?

jestemnie w aplikacji internetowej więc nie mogę użyćInRequestScope.

Próbuję zrobić coś podobnego ... i używam DI, ale potrzebuję mojej UOWDisposed i stworzyliśmy w ten sposób.

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

    uow.SaveChanges();
}

EDYCJA: Chcę tylko mieć pewność, że rozumiem… po obejrzeniuhttps://github.com/ninject/ninject.extensions.namedscope/wiki/InNamedScope myślę o mojej obecnej architekturze aplikacji konsoli, która faktycznie używa Ninject.

Powiedzmy :

Klasa A to klasa warstwy usług

Klasa B to jednostka pracy, która przyjmuje parametr interfejsu (IContextFactory)

Klasa C jest repozytorium, które przyjmuje parametr interfejsu (IContextFactory)

Chodzi o to, aby móc wykonywać operacje kontekstowe na 2 lub więcej repozytoriach i używać jednostki pracy do wprowadzania zmian.

Klasa D jest fabryką kontekstu (Entity Framework), która udostępnia instancję (trzymaną w kontenerze) kontekstu, który jest współdzielony między klasą B i C (.. i byłby również dla innych repozytoriów).

Fabryka kontekstów utrzymuje instancję w swoim kontenerze, więc nie chcę ponownie używać tej instancji całej nazwy, ponieważ kontekst musi zostać usunięty na końcu operacji usługi. Jest to główny cel InNamedScope?

Rozwiązaniem byłoby, ale w ogóle nie jestem pewien, czy robię to dobrze, instancja usługowa będzie przekrojowa, co oznacza, że ​​tak naprawdę nigdy się nie pozbyli? :

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");

questionAnswers(2)

yourAnswerToTheQuestion