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

标签 asp.net-mvc dependency-injection 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 似乎主要为 Controller 工作。

最佳答案

您正在编写一个角色提供程序,但这些当前不支持 DI。 MVC 中的许多类都支持 DI,这就是为什么您会看到它与 Controller 一起工作。

为了能够注入(inject)构造函数参数,DI 容器必须负责创建您希望注入(inject)的对象。仅注册一个类型并不会神奇地使其可定位。

对于 roleproviders,框架中的 Roles 类创建提供程序的实例,包括您的自定义提供程序。它仅适用于无参数构造函数。您需要在自定义提供程序中使用属性注入(inject)之类的功能,并使用 Roles.Provider 获取实例以将依赖项注入(inject)其中。

关于asp.net-mvc - 使用 DI ninject 的自定义角色提供程序抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8248545/

相关文章:

asp.net - 是否可以检测页面刷新(F5)服务器端?

c# - 替换 ASP.NET Core 中中间件的激活器

c# - 使用 Simple Injector 将依赖项注入(inject) OWIN 中间件和每个 Web 请求

c# - 带有对象初始化器和 LINQ 的 Ninject

c# - 结合单元测试(模拟)和依赖注入(inject)框架

c# - 表单提交后重置textarea的值

asp.net-mvc - 在asp.net MVC中对表进行排序

asp.net-mvc - Windows Azure + Asp.Net MVC + 电子商务

scala - Scala 有没有办法隐式转换隐式参数?

dependency-injection - 在实现 IDependencyResolver 和 IDependencyScope 的类中应如何编码 Dispose?