[Databases] Repository Pattern с Unit of work - Ninject въпрос


1

Здравейте, 

Когато се използва Repository pattern с Unit of work и ги bind - ваме през Ninject е необходимо DbContext-a да е в Singleton scope за да се държи адекватно, когато се извика commit (или там както сме кръстили метода). Тъй като знаем, че ако натрупаме прекалено много неща, за които да следи DbContext-a (дори и периодично да се извиква Save Changes), performance - a пада (в един момент, ако са прекалено много, а паметта твърде малко - и препълване на паметта), върпоса ми е има ли как да се recreate-ваt Repository-то, Unit of work-a и DbContext-a, който върви с тях, но е в Singleton scope? На мен ми се върти идея за factory, което получава всеки път нов DbContext и с него създава Repository и Unit of work. И на контролера (или importer или каквото ще е там) да се подава factory-то..




Отговори



1
Можеш просто, когато bind-ваш контекста накрая да лепнеш AsSingleton(). Bind<DbContext>().To<DbContext>().AsSingleton(), може и да се казваше по друг начин метода, не съм сигурен. Ninject си има опция да ги правиш singleton

от magadisho (823 точки)


0
:) Мен проблема ми е точно, че не трябва да е Singleton, може би просто не съм го обяснил добре. Ако е Singleton всеки път, независимо къде се поиска ще се връща една и съща инстанция, а на мен ми трябва за всяко конкретно Repository и Unit of work нова инстанция на DbContext за да е възможно на определен брой редове да се recreate-ва DbContext-a

от nProdanov (587 точки)

0
Ами иначе мисля, че при всяко поискване на репозитори и юнита се създава нов контекст, обаче не съм сигурен.

от magadisho (823 точки)