属性 注入的 Ninject 仍然是 null
Property injected by Ninject is still null
我有 class,我用它注册为 GlobalFilter 来处理 execpions。我在global.asax上注册了,那里一切正常。
当我的操作发生异常时,我进入 OhException 方法并得到 NullReference 异常,因为 LogManager 属性 为空。
为什么 nInject 没有'不注射吗?
public class HandleErrorFilterAttribute : HandleErrorAttribute
{
[Inject]
public ILogManager LogManager { get; set; }
public override void OnException(ExceptionContext filterContext)
{
LogManager.LogError("Unhandled exception thrown", filterContext.Exception);
base.OnException(filterContext);
}
}
这段服务注入下面的代码(忘记写了)
kernel.Bind<ILogManager>().To<LogManager>();
然后我创建对象
public void RegisterGlobalFilters()
{
var handleErrorAttribute = new HandleErrorFilterAttribute();
GlobalFilters.Filters.Add(handleErrorAttribute);
}
默认情况下,属性由 CLR 创建,而不是由 DI 库创建。 DI 库只能在它自己创建的对象中注入依赖项,或者当您明确告诉它 'build up' 这个对象时。因此,如果您 new
自己创建对象或让 CLR 创建属性,DI 库就没有机会向其中注入依赖项。
我有 class,我用它注册为 GlobalFilter 来处理 execpions。我在global.asax上注册了,那里一切正常。
当我的操作发生异常时,我进入 OhException 方法并得到 NullReference 异常,因为 LogManager 属性 为空。
为什么 nInject 没有'不注射吗?
public class HandleErrorFilterAttribute : HandleErrorAttribute
{
[Inject]
public ILogManager LogManager { get; set; }
public override void OnException(ExceptionContext filterContext)
{
LogManager.LogError("Unhandled exception thrown", filterContext.Exception);
base.OnException(filterContext);
}
}
这段服务注入下面的代码(忘记写了)
kernel.Bind<ILogManager>().To<LogManager>();
然后我创建对象
public void RegisterGlobalFilters()
{
var handleErrorAttribute = new HandleErrorFilterAttribute();
GlobalFilters.Filters.Add(handleErrorAttribute);
}
默认情况下,属性由 CLR 创建,而不是由 DI 库创建。 DI 库只能在它自己创建的对象中注入依赖项,或者当您明确告诉它 'build up' 这个对象时。因此,如果您 new
自己创建对象或让 CLR 创建属性,DI 库就没有机会向其中注入依赖项。