加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 使用DI ninject抛出错误的自定义角色提供程序

发布时间:2020-12-16 10:01:22 所属栏目:asp.Net 来源:网络整理
导读:我将CustomRoleProver设置为: public class CustomRoleProvider : RoleProvider { private readonly IRepositoryUser _repository; public CustomRoleProvider(IRepositoryUser repository) { _repository = repository; }... 在我的Global.asax.cs中,我有
我将CustomRoleProver设置为:

public class CustomRoleProvider : RoleProvider
    {
        private readonly IRepository<User> _repository;

        public CustomRoleProvider(IRepository<User> repository)
        {
            _repository = repository;
        }

...

在我的Global.asax.cs中,我有:

//Create Ninject DI kernel
            var kernel = new StandardKernel();

            kernel.Bind<IRepository<User>>().To<Repository<User>>();

            //Tell ASP.NET MVC 3 to use our Ninject DI Container
            DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));

当我尝试运行我的代码时,我得到:

配置错误
描述:处理为此请求提供服务所需的配置文件时发生错误.请查看下面的具体错误详细信息并相应地修改配置文件.

分析器错误消息:没有为此对象定义无参数构造函数.

来源错误:

第64行:
第65行:
第66行:
第67行:
第68行:

所以也许我对DI和ninject有一个完全错误的理解.我认为当它试图实例化CustomRoleProvider时,它会创建用户存储库并将其传递给构造函数,而不是尝试使用无参数的存储库.

我是否理解错误或者我的设置不正确?

我发现这很奇怪,因为DI似乎主要是为控制器工作.

解决方法

你正在编写一个角色提供者,但这些目前还不是DI. MVC中的很多类都是DI感知的,这就是为什么你看到它与控制器协同工作的原因.

为了能够注入构造函数参数,DI容器必须负责创建您希望注入的对象.只是注册一个类型并不会神奇地使它可以定位.

使用角色提供程序,框架内的Roles类可以创建提供程序的实例,包括您的自定义提供程序.它只适用于无参数构造函数.您需要在自定义提供程序中使用类似属性注入的东西,并使用Roles.Provider来获取实例以注入依赖项.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读