如何在使用Ninject时处理DBContext?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (70)

我正尝试第一次使用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绑定,

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

在EF和Ninject上面的例子中,这种模式应该可以正常工作。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励