Jak obsługiwać DBContext podczas korzystania z Ninject
Próbuję użyć Ninject i OpenAccess po raz pierwszy. Proszę mi pomóc z następującymi. Oto jak wygląda mój projekt ...
public class ContentController : Controller
{
private ContentService contentSvc;
public ContentController(ContentService contentSvc)
{
this.contentSvc = contentSvc;
}
}
Następująca klasa znajduje się w folderze w mojej aplikacji internetowej.
public class ContentService
{
private IContentRepository contentRepository;
public ContentService(IContentRepository contentRepository)
{
this.contentRepository = contentRepository;
}
public void InsertContent(Content content)
{
contentRepository.InsertContent(content);
}
}
Następujące repozytorium należy do oddzielnego zespołu.
public class ContentRepository : IContentRepository
{
DBContext db;
public ContentRepository(DBContext _db)
{
db = _db;
}
public void InsertContent(Content content)
{
db.Add(content);
}
}
Oto jak wygląda oprawa Ninject.
kernel.Bind<ContentService>().To<ContentService>().InRequestScope();
kernel.Bind<IContentRepository>().To<ContentRepository>().InRequestScope().WithConstructorArgument("_db", new DBContext());
Wszystko działa dobrze, jeśli ściągam jedną stronę na raz. Używam prostego narzędzia „XENU” do pobierania wielu stron jednocześnie. To wtedy dostaję błędy z DBContext, pobierając wiele stron naraz.
Nie jestem pewien, czy Ninject rozpakowuje DBContext w każdym żądaniu? Dostaję różne błędy, np. „Odwołanie do obiektu nie jest ustawione na wystąpienie obiektu.”, LUB „ExecuteReader wymaga otwartego i dostępnego połączenia. Aktualny stan połączenia jest otwarty.
P.S.Mam ContentService w folderze w mojej aplikacji internetowej MVC. ContentRepository to osobny zespół. Dodam logikę biznesową w ContentService i użyję „ContentRepository” tylko do operacji CRUD. Daj mi znać, czy ta architektura jest w porządku, czy też istnieje lepszy sposób tworzenia usług i repozytoriów.