Подтвердить что ты не робот

Как обращаться с DBContext при использовании Ninject

Я пытаюсь использовать Ninject и OpenAccess в первый раз. Пожалуйста, помогите мне в следующем. Вот как выглядит мой проект...

public class ContentController : Controller
{
    private ContentService contentSvc;

    public ContentController(ContentService contentSvc)
    {
        this.contentSvc = contentSvc;
    }
}

Следующий класс находится под папкой в ​​моем веб-приложении.

public class ContentService
{
    private IContentRepository contentRepository;

    public ContentService(IContentRepository contentRepository)
    {
        this.contentRepository = contentRepository;
    }

    public void InsertContent(Content content)
    {
         contentRepository.InsertContent(content);
    }
}

Следующий репозиторий принадлежит отдельной сборке.

public class ContentRepository : IContentRepository
{
    DBContext db;
    public ContentRepository(DBContext _db)
    {
        db = _db;
    }

    public void InsertContent(Content content)
    {
             db.Add(content);
    }
}   

Вот как выглядит привязка Ninject..

kernel.Bind<ContentService>().To<ContentService>().InRequestScope();
kernel.Bind<IContentRepository>().To<ContentRepository>().InRequestScope().WithConstructorArgument("_db", new DBContext());

Все работает нормально, если я получаю одну страницу за раз. Я использую простой инструмент "XENU" для извлечения нескольких страниц одновременно. Это когда я получаю ошибки с DBContext путем выборки нескольких страниц за раз.

Я не уверен, что Ninject предлагает DBContext в каждом запросе? Я получаю разные ошибки, например. 'Ссылка на объект не установлена ​​в экземпляр объекта.', OR 'ExecuteReader требует открытого и доступного соединения. Состояние текущего соединения открыто. '

P.S.

У меня есть ContentService под папкой в ​​моем веб-приложении MVC. ContentRepository - отдельная сборка. Я буду добавлять бизнес-логику в ContentService и использовать "ContentRepository" только для операций CRUD. Также, пожалуйста, дайте мне знать, хорошо ли эта архитектура, или есть лучший способ создания сервисов и репозиториев.

4b9b3361

Ответ 1

Здесь, как бы я сделал ваши привязки Ninject,

kernel.Bind<DBContext>().ToSelf().InRequestScope();
kernel.Bind<ContentService>().ToSelf().InRequestScope();
kernel.Bind<IContentRepository>().To<ContentRepository>().InRequestScope();

Этот шаблон должен отлично работать в приведенном выше примере с EF и Ninject.