我正在尝试掌握 Ninject,但似乎在这里找不到任何有助于解决我的问题的文章。我创建了一个简单的 n 层解决方案,其中包含 Web、业务逻辑和数据访问层。在 DAL 中,我为我的数据库(简单的两个表 DB)和通用存储库(IRepository
和ItemRepository
)创建了一个模型,如下所示。
public interface IRepository<T> where T : class
{
IQueryable<T> GetAll();
}
这个接口的实现看起来像这样。
public class ItemRepository : IRepository<Item>
{
public IQueryable<Item> GetAll()
{
IQueryable<Item> result;
using (GenericsEntities DB = new GenericsEntities()) {
result = DB.Set<Item>();
}
return result;
}
}
在我的 BLL 中,我创建了一个DataModule
、一个Item
Object 和一个类 ( DoWork
) 来使用它们。这些看起来如下......
public class DataModule : NinjectModule
{
public override void Load()
{
Bind(typeof(IRepository<>)).To<ItemRepository>();
}
}
项目对象
public class Item
{
DAL.IRepository<DAL.Item> _repository;
[Inject]
public Item(DAL.IRepository<DAL.Item> repository) {
_repository = repository;
}
public List<DAL.Item> GetItems(){
List<DAL.Item> result = new List<DAL.Item>();
result = _repository.GetAll().ToList();
return result;
}
}
DoWork 类
public DoWork()
{
var DataKernel = new StandardKernel(new DataModule());
var ItemRepository = DataKernel.Get<IRepository<DAL.Item>>();
Item thisItem = new Item(ItemRepository);
List<DAL.Item> myList = thisItem.GetItems();
}
我遇到的问题是,当我从 Web 项目中使用此代码时,我得到一个“DbContext 已处理”运行时错误。我试图让事情变得简单,只是为了掌握框架,但不明白如何让DbContext
范围正确。我已经查看了这里的其他文章,但所有文章都针对某些场景,我想掌握正确的基础知识。
任何人都可以帮助或指出我正确的方向吗?