0

我目前正在使用 ASP.NET MVC 5 (C#) 进行我的考试项目。

我的问题是我的控制器之一,它严重依赖授权角色属性来确保人们具有特定的角色,从而访问控制器中的各种功能。它工作正常,直到我想通过构造函数使用依赖注入......似乎在我为 mvc3 安装 ninject 之后,设置绑定并使构造函数接受控制器中的接口。它只是忽略所有授权标签?我知道这不是语法错误,因为控制器中没有什么不同,除了新的构造函数。这似乎对帐户控制器没有影响,所以我不得不假设 Ninject 把事情搞砸了。

每个人都可以做他们想做的一切并在控制器中运行所有方法,因为我为 ninject 设置了它,但我根本不明白?

任何人都可以帮助或知道这个问题以及解决它的任何步骤吗?

我必须在周一提交项目,所以我希望一些大师能在这个问题上相对快速地启发我。谷歌搜索告诉我 Ninject 不适用于该属性是真的吗?如果是的话我就完蛋了。

好吧,我基本上将它添加到 NinjectWebCommon 的“RegisterServices”方法中:

kernel.Bind<IChildRepository>().To<ChildRepository>();

(我正在为放学后观看孩子的机构制作一个网站等。childcontroller 控制系统中创建的“孩子”的管理)。

private readonly IChildRepository _childRepository;

public ChildController(IChildRepository childRepository)
{
    _childRepository = childRepository;
}

这是我的存储库类:

public class ChildRepository : IChildRepository
    {
        ChildContext context = new ChildContext();


    public IQueryable<Child> All
    {
        get { return context.Children; }
    }

    public IQueryable<Child> AllIncluding(params Expression<Func<Child, object>>[]     includeProperties)
    {
        IQueryable<Child> query = context.Children;
        foreach (var includeProperty in includeProperties)
        {
            query = query.Include(includeProperty);
        }
        return query;
    }

    public Child Find(int id)
    {
        return context.Children.Find(id);
    }

    public void InsertOrUpdate(Child child)
    {
        if (child.ChildId == default(int))
        {
            context.Children.Add(child);
        }
        else
        {
            context.Entry(child).State = System.Data.Entity.EntityState.Modified;
        }
    }

    public void Delete(int id)
    {
        var child = context.Children.Find(id);
        context.Children.Remove(child);
    }

    public void Save()
    {
        context.SaveChanges();
    }

    public void Dispose()
    {
        context.Dispose();
    }

}

我的回购界面:

public interface IChildRepository : IDisposable
    {
        IQueryable<Child> All { get; }
        IQueryable<Child> AllIncluding(params Expression<Func<Child, object>>[] includeProperties);
        Child Find(int id);
        void InsertOrUpdate(Child child);
        void Delete(int id);
        void Save();
    }

这是控制器方法中的索引方法,向您展示我如何使用授权:

    [Authorize(Roles = "Admin, CanEdit")]
    public ActionResult Index()
    {
        return View(_childRepository.All.ToList());
    }

现在如何运作?您甚至可以在不登录系统的情况下访问子控制器视图和除索引之外的所有其他方法?

4

1 回答 1

1

我通过谷歌搜索找到了问题的解决方案,显然将这一行添加到 registerservices 方法解决了整个问题。

kernel.Bind<IFilterProvider>().To<FilterAttributeFilterProvider>();

从我现在喜欢的这个人那里得到它:http: //pieterderycke.wordpress.com/2012/03/01/using-asp-net-filters-with-the-ninject-depncency-resolver/

以为我会自己回答这个问题,所以如果其他人遇到同样的问题,他们可以让它发挥作用!

于 2014-05-22T10:51:25.010 回答