微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我将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来获取实例以注入依赖项.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐