c# - 参数名称 : root cannot be Null exception Ninject

标签 c# .net asp.net-mvc dependency-injection ninject

我在代码重构后收到来自 Ninject 的异常。因此我知道什么导致了错误,但无法确定原因。代码编译文件,但我从 Ninject 收到运行时错误:

Cannot be null Parameter name: root

我正在尝试注入(inject)一个类的常量实例:

var subscriptionApiClientHelper = new SubscriptionApiClientHelper(AppSettings.Get<string>("AdminAPIUrl"),
            AppSettings.Get<string>("APIV2Key"), Kernel.Get<ICache>());

kernel.Bind<SubscriptionApiClientHelper>().ToConstant(subscriptionApiClientHelper);

Ninject 在第一行抛出异常。

我的类 SubscriptionApiClientHelper 继承自另一个类(在 Nuget 包中引用),因此:

public SubscriptionApiClientHelper(string baseUrl, string apiKey, ICache cache) : base(baseUrl, apiKey)
{
     _cache = cache;
}

它的构造函数是这样的:

 public SubscriptionApiClient(string baseUrl, string apiKey)
 {
     _baseUrl = baseUrl;
     _apiKey = apiKey;
 }

这个基类中的几个方法被重写并实现了缓存,因此重写的原因是我不需要在基类的所有方法上实现缓存。虽然我从同一个 Nuget 包中注入(inject)了一些其他类,但没有问题,这些类没有我怀疑导致问题的继承。请注意,我成功地注入(inject)并使用了我继承的基类 (SubscriptionApiClient),这只是导致问题的辅助类。

这是完整的堆栈跟踪:

at Ninject.ResolutionExtensions.GetResolutionIterator(IResolutionRoot root, Type service, Func`2 constraint, IEnumerable`1 parameters, Boolean isOptional, Boolean isUnique)
at Ninject.ResolutionExtensions.Get[T](IResolutionRoot root, IParameter[] parameters)
at AdminPortal.NinjectWebCommon.RegisterServices(IKernel kernel) in C:\Projects\AdminPortal\AdminPortal\App_Start\NinjectWebCommon.cs:line 106
at AdminPortal.NinjectWebCommon.CreateKernel() in C:\Projects\AdminPortal\AdminPortal\App_Start\NinjectWebCommon.cs:line 72
at Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback)
at AdminPortal.NinjectWebCommon.Start() in C:\Projects\AdminPortal\AdminPortal\App_Start\NinjectWebCommon.cs:line 39

有谁知道出了什么问题吗?

最佳答案

您的 Kernel 变量被分配给空引用。因为 Get 是一个扩展方法,所以您不会得到 NullReferenceException,而是 ArgumentNullException。运行此测试时我遇到了同样的异常:

StandardKernel kernel = null;
kernel.Get<ICache>();

关于c# - 参数名称 : root cannot be Null exception Ninject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48951114/

相关文章:

c# - 检查是否使用 nlog 消息

C# MySQL 中的连接太多

asp.net-mvc - 更新 WSDL 引用但 web 配置未在 ASP.net MVC 4 项目中更新

javascript - 在动态添加的表行中丢失 css 样式

asp.net-mvc - MVC 与 SharePoint

没有数据库模型的 C# 动态查询

c# - 时间显示格式

c# - winforms - 两次显示相同的表格?

c# - TimeZoneInfo - .net core 1.1 上的调整规则错误

c# - 从继承自泛型接口(interface)的类中获取泛型参数的类型