我是第一次尝试使用Ninject和OpenAccess。请帮我做以下事情。这是我的项目的样子。
public class ContentController : Controller
{
private ContentService contentSvc;
public ContentController(ContentService contentSvc)
{
this.contentSvc = contentSvc;
}
}
下面的类位于我的web应用程序中的一个文件夹下。
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??我得到了不同的错误,例如‘未将对象引用设置为对象的实例。’,或者'ExecuteReader需要打开的可用连接。该连接的当前状态为打开。‘
附注:
我在我的MVC应用程序中的一个文件夹下有ContentService。ContentRepository是一个单独的程序集。我将在ContentService中添加业务逻辑,并仅将'ContentRepository‘用于CRUD操作。另外,请让我知道这个架构是否可以,或者有没有更好的方法来创建服务和存储库。
发布于 2012-08-12 19:56:21
下面是我将如何完成您的Ninject绑定,
kernel.Bind<DBContext>().ToSelf().InRequestScope();
kernel.Bind<ContentService>().ToSelf().InRequestScope();
kernel.Bind<IContentRepository>().To<ContentRepository>().InRequestScope();
这个模式在上面的例子中应该可以很好地使用EF和Ninject。
https://stackoverflow.com/questions/11921883
复制相似问题