Ninject,库和DAL [英] Ninject, Repository and DAL

查看:151
本文介绍了Ninject,库和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 =htt​​ps://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 AdminControllers 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆