Ninject,库和DAL [英] Ninject, Repository and DAL
问题描述
我是新来的MVC,库的概念和依赖注入。
我的资料库和DAL看起来像
公共接口IRepository< TEntity>其中,TEntity:类
{
清单< TEntity>使用fetchall();
IQueryable的< TEntity>查询{搞定; }
无效添加(TEntity实体);
无效删除(TEntity实体);
无效保存();
}
公共类库< T> :IRepository< T>其中T:类
{
私人只读的DataContext _db; 公共库(DataContext的DB)
{
_db = DB;
} #地区IRepository< T>会员 公众的IQueryable< T>询问
{
{返回_db.GetTable< T>(); }
} 公开名单< T>使用fetchall()
{
返回Query.ToList();
} 公共无效添加(T实体)
{
_db.GetTable< T>()InsertOnSubmit(实体)。
} 公共无效删除(T实体)
{
_db.GetTable< T>()DeleteOnSubmit(实体)。
} 公共无效保存()
{
_db.SubmitChanges();
} #endregion
}
在Global.asax文件中我有
私人无效RegisterDependencyResolver()
{
VAR内核=新StandardKernel();
核心。
绑定(typeof运算(IRepository<>))。
为了(typeof运算(库<>))
.WithConstructorArgument(DB,新的DataContext(ConfigurationManager.ConnectionStrings [的ConnectionString]的ToString()));
DependencyResolver.SetResolver(新NinjectDependencyResolver(内核));
}
但是当我试图访问资源库我得到对象引用未设置为一个对象
的实例。难道我的理解应该正确怎样库和注入工作?
公共类AdminController:控制器
{ 私人只读IRepository<使用者> _userRepository; 公众的ActionResult指数()
{
变种一个= _userRepository.FetchAll(); //我在这里得到异常
返回查看();
}
}
您获得nullref因为你没有设置 _userRepository
。它设置在 AdminController
的构造和Niject会很乐意把它注射:
公共类AdminController:控制器
{
私人只读IRepository<使用者> _userRepository;
公共AdminController(IRepository<使用者> userRepository)
{
_userRepository = userRepository;
} // ...
}
您可以在这里阅读更多有关与Ninject 和<一注采井网HREF =https://github.com/ninject/ninject/wiki/How-Injection-Works相对=nofollow>注射是如何工作的。
I am new to MVC, repository concept and dependency injection.
My repository and DAL looks like
public interface IRepository<TEntity> where TEntity : class
{
List<TEntity> FetchAll();
IQueryable<TEntity> Query { get; }
void Add(TEntity entity);
void Delete(TEntity entity);
void Save();
}
public class Repository<T> : IRepository<T> where T : class
{
private readonly DataContext _db;
public Repository(DataContext db)
{
_db = db;
}
#region IRepository<T> Members
public IQueryable<T> Query
{
get { return _db.GetTable<T>(); }
}
public List<T> FetchAll()
{
return Query.ToList();
}
public void Add(T entity)
{
_db.GetTable<T>().InsertOnSubmit(entity);
}
public void Delete(T entity)
{
_db.GetTable<T>().DeleteOnSubmit(entity);
}
public void Save()
{
_db.SubmitChanges();
}
#endregion
}
In Global.asax file I have
private void RegisterDependencyResolver()
{
var kernel = new StandardKernel();
kernel.
Bind(typeof(IRepository<>)).
To(typeof(Repository<>))
.WithConstructorArgument("db", new DataContext(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()));
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}
but when I am trying to access repository I get "Object reference not set to an instance of an object
". Do I understand correctly how Repository and Injection should work?
public class AdminController : Controller
{
private readonly IRepository<User> _userRepository;
public ActionResult Index()
{
var a = _userRepository.FetchAll(); //I get exception here
return View();
}
}
You get nullref because you don't set _userRepository
. Set it in the AdminController
s constructor and Niject will inject it happily:
public class AdminController : Controller
{
private readonly IRepository<User> _userRepository;
public AdminController(IRepository<User> userRepository)
{
_userRepository = userRepository;
}
//...
}
You can read here more about the injection patterns with Ninject and how injection works.
这篇关于Ninject,库和DAL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!