gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:07:09 24 4
gpt4 key购买 nike

我将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com