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

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....